4

システム情報/構成、メモリ使用量などを読み取るクラスをSolaris/Unix使用してサーバーに接続しようとしています。C#

私の要件は、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)   
4

1 に答える 1

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;
    }
}
于 2013-04-16T20:00:38.833 に答える