2015-12-11 3 views
-1

Я использую C# с SSH.NET.Как выдать команду SSH

Я хочу выпустить команду PWD, но не смог найти никакой документации или помощи. Я не знаю, как использовать класс «SshClient».

Update: Я также попытался поэкспериментировать с классом 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 Многословный: 1: SendMessage к серверу 'ChannelRequestMessage': 'SSH_MSG_CHANNEL_REQUEST: # 152199'.

SshNet.Logging Многословный: 1: ReceiveMessage с сервера: 'ChannelFailureMessage': 'SSH_MSG_CHANNEL_FAILURE: # 0'. *

В методе ssh.RunCommand называют программа переходит в некотором состоянии сна (или ожидает около 1 минуты). Переменные sshCommand.Result и sshCommand.Error пусты.

+0

Ваш вопрос непонятен. У вас есть вопрос о команде PWD? – Matheno

+4

Пожалуйста, включите то, что вы пробовали, что вы ожидаете, что произойдет, и информацию о том, что происходит вместо этого. – joepd

+0

MHakvoort и joepd, я обновил свой вопрос – user1451111

ответ

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.

+0

Я пробовал, но ничего не происходит. Я получаю следующие два сообщения в окне вывода Visual Studio: .............. SshNet.Logging Verbose: 1: SendMessage на сервер 'ChannelRequestMessage': 'SSH_MSG_CHANNEL_REQUEST: # 152823'. SshNet.Logging Verbose: 1: ReceiveMessage с сервера: 'ChannelFailureMessage': 'SSH_MSG_CHANNEL_FAILURE: # 0'. Поток 0x1618 вышел с кодом 259 (0x103) ................... .......... В методе ssh.RunCommand вызовите программу переходит в состояние сна (или ждет около 1 минуты). Переменные sshCommand.Result и sshCommand.Error пусты. – user1451111

+0

Код работает для меня. Является ли это исключением какого-либо типа, который вы получаете или просто сообщения? Можете ли вы проверить свои учетные данные и настройки своего хоста? Можете ли вы использовать одни и те же учетные данные для выполнения команды с использованием, например, шпатлевки? Ваш хост настроен на разрешение таких подключений, и у него есть сервер SSH? – w128

+0

Кроме того, вы используете свой код в чистом проекте или попробовали его в каком-то ранее существующем проекте, где бы вы использовали потоки? – w128