2013-03-27 2 views
4

Я пытаюсь подключиться к серверу Solaris/Unix используя C# класс для чтения системной информации/конфигурации, использования памяти и т.д.Auth сбой ошибки при использовании SharpSSH

Моего требования для выполнения команд на сервере с C# (, как и у клиента PuTTY) и сохранить ответ в переменной string для последующей обработки.

После некоторых исследований я узнал, что SharpSSH библиотека может использоваться для этого.

Когда я пытаюсь запустить свой код, следующая строка дает мне Auth Fail исключение. Я уверен, что учетные данные (имя сервера, имя пользователя и пароль) верны, так как я могу войти в систему от клиента PuTTY с теми же учетными данными.

SshStream ssh = new SshStream(servername, username, password); 

Что я делаю неправильно?

Ниже приведена трассировка стека, если это помогает!

at Tamir.SharpSsh.jsch.Session.connect(Int32 connectTimeout) 
at Tamir.SharpSsh.jsch.Session.connect() 
at Tamir.SharpSsh.SshStream..ctor(String host, String username, String password) 
+0

Что-нибудь в журнале сервера? –

+0

@JoachimIsaksson К сожалению, я не привык к серверам UNIX и не являюсь администратором. Меня просят написать программу для сбора этой информации. – BlackCursor

+0

Есть ли что-то еще, что необходимо предоставить, чтобы вы могли иметь соединение SSH с сервером (я слышал что-то об открытых/закрытых ключах. Предполагаю, что это для SCP)? – BlackCursor

ответ

2

После некоторого исследования я нашел код VB, который указал мне в правильном направлении. Похоже, что добавление дополнительного обработчика событий для KeyboardInteractiveAuthenticationMethod помогло решить эту проблему. Надеюсь, это помогает кому-то другому.

void HandleKeyEvent(Object sender, AuthenticationPromptEventArgs e) 
    { 
     foreach (AuthenticationPrompt prompt in e.Prompts) 
     { 
      if (prompt.Request.IndexOf("Password:", StringComparison.InvariantCultureIgnoreCase) != -1) 
      { 
       prompt.Response = password; 
      } 
     } 
    } 

private bool connectToServer() 
{ 
    try 
    { 
     KeyboardInteractiveAuthenticationMethod kauth = new KeyboardInteractiveAuthenticationMethod(username); 
     PasswordAuthenticationMethod pauth = new PasswordAuthenticationMethod(username, password); 
     kauth.AuthenticationPrompt += new EventHandler<AuthenticationPromptEventArgs>(HandleKeyEvent); 

     ConnectionInfo connectionInfo = new ConnectionInfo(serverName, port, username, pauth, kauth); 

     sshClient = new SshClient(connectionInfo); 
     sshClient.Connect(); 
     return true; 
     } 
    catch (Exception ex) 
    { 
     if (null != sshClient && sshClient.IsConnected) 
     { 
      sshClient.Disconnect(); 
     } 
     throw ex; 
    } 
} 
+0

Можете ли вы дать немного больше информации? В какой файл или класс вы добавили этот код? Благодаря! – laughsloudly

+0

@ laughsloudly Я использовал ** библиотеку SSH.NET ** из этого [link] (https://sshnet.codeplex.com/). Я создал свой собственный класс и использовал объект 'SshClient' как переменную-член. – BlackCursor