【问题标题】:How to issue SSH command如何发出 SSH 命令
【发布时间】:2016-03-17 08:29:56
【问题描述】:

我在 SSH.NET 中使用 C#。

我想发出 PWD 命令,但找不到任何文档或帮助。我不知道如何使用“SshClient”类。

更新: 我也尝试使用下面的代码尝试使用 SshClient 类,但它什么也没做,既没有任何错误也没有任何异常。

ConnectionInfo ConnNfo = new ConnectionInfo("FTPHost", 22, "FTPUser",
new AuthenticationMethod[]{

   // Pasword based Authentication
   new PasswordAuthenticationMethod("FTPUser","FTPPass")
   }                
   );

using (var ssh = new SshClient(ConnNfo))
{
    ssh.Connect();                
    if (ssh.IsConnected)
    {                    
         string comm = "pwd";
         using (var cmd = ssh.CreateCommand(comm))
         {
            var returned = cmd.Execute();
            var output = cmd.Result;
            var err = cmd.Error;
            var stat = cmd.ExitStatus;
         }
     }
   ssh.Disconnect();
}

什么都没有发生。既不是错误也不是异常。在 Visual Studio 控制台上,我得到以下输出。

*SshNet.Logging Verbose: 1 : SendMessage to server 'ChannelRequestMessage': 'SSH_MSG_CHANNEL_REQUEST : #152199'。

SshNet.Logging 详细:1:来自服务器的 ReceiveMessage: 'ChannelFailureMessage': 'SSH_MSG_CHANNEL_FAILURE : #0'.*

在调用 ssh.RunCommand 方法时,程序进入某种睡眠状态(或等待大约 1 分钟)。 sshCommand.Result 和 sshCommand.Error 变量为空。

【问题讨论】:

  • 您的问题不清楚。您对 PWD 命令有疑问吗?
  • 请提供您尝试过的操作、您期望会发生的情况以及所发生情况的信息。
  • MHakvoort 和 joepd,我更新了我的问题

标签: c# ssh.net


【解决方案1】:

这是一个简单的示例 - 一种方法。

string host = "myhost";
string user = "root";
string pwd = "#secret#!"; // Don't use hardcoded plain-text passwords if possible - for demonstration only.

using (PasswordAuthenticationMethod auth = new PasswordAuthenticationMethod(user, pwd))
{
    ConnectionInfo connection = new ConnectionInfo(host, user, auth);
    using (var ssh = new SshClient(connection))
    {
        ssh.Connect();
        SshCommand sshCommand = ssh.RunCommand("pwd");
        Console.WriteLine("Command execution result: {0}", sshCommand.Result);
    }
}

请注意,如果您指定了无效命令(例如“pwdxxxx”),您将不会收到异常,但会在SshCommand.Error 字符串中存储错误。

另请注意,这使用 SSH PasswordAuthentication,可能未在您的 SSH 配置中启用。

【讨论】:

  • 我试过了,但没有任何反应。我在 Visual Studio 输出窗口中收到以下两条消息:........SshNet.Logging Verbose: 1 : SendMessage to server 'ChannelRequestMessage': 'SSH_MSG_CHANNEL_REQUEST: #152823'。 SshNet.Logging 详细:1:来自服务器的 ReceiveMessage:'ChannelFailureMessage':'SSH_MSG_CHANNEL_FAILURE:#0'。线程 0x1618 已以代码 259 (0x103) 退出..................在 ssh.RunCommand 方法调用程序进入某种睡眠状态(或等待大约 1 分钟)。 sshCommand.Result 和 sshCommand.Error 变量为空。
  • 代码对我有用。这是您收到的某种类型的例外还是只是一条消息?您可以检查您的凭据和主机设置吗?您可以使用相同的凭据执行命令吗?油灰?您的主机是否配置为允许此类连接,并且它是否运行了 SSH 服务器?
  • 另外,你是在一个干净的项目中运行你的代码,还是你在一些以前存在的项目中尝试过它,而你恰好会使用线程?
  • 我在一个干净的项目中运行你提供的代码。可以使用 WinSCP 实用程序访问服务器,我可以使用它下载和上传文件。凭据很好,因为使用相同的 ConnectionInfo 对象我可以创建一个“SftpClient”对象并使用它来下载和上传文件。我与您分享的输出来自 Visual Studio 的输出窗口,由 SSH.NET 项目本身编写,因为我已在我的解决方案中添加了它的整个源代码。
  • 可以用putty在同一台主机上成功执行同样的命令吗?您的 SSH 配置中是否启用了密码验证?如果没有,如果您使用KeyboardInteractiveAuthenticationMethod,代码是否有效?
【解决方案2】:

尝试查看 SSH.NET 的文档:

SSH.NET at CodePlex

Code sample for executing a command(推荐)

Help file.CHM

【讨论】:

  • 查看我对 w128 回答的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-08
  • 2016-09-17
  • 2023-04-06
  • 2016-12-21
  • 1970-01-01
  • 2020-09-01
相关资源
最近更新 更多