【问题标题】:Auth fail error when using SharpSSH使用 SharpSSH 时出现身份验证失败错误
【发布时间】:2013-03-27 20:18:42
【问题描述】:

我正在尝试使用C# 类连接到Solaris/Unix 服务器以读取系统信息/配置、内存使用情况等。

我的要求是从 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)   

【问题讨论】:

  • 服务器端日志中的任何内容?
  • @JoachimIsaksson 遗憾的是,我不习惯 UNIX 服务器,也不是管理员。我被要求编写一个程序来收集这些信息。
  • 还有什么需要提供的,以便您可以与服务器建立SSH 连接(我听说过一些关于公钥/私钥的信息。我认为这是针对 SCP 的)?跨度>
  • SharpSSH 不是最新的和最新的服务器,因此可能会出现问题。还有更多可行的替代方案,包括免费的和商业的。
  • @EugeneMayevski'EldoSCorp 你能提出替代方案吗?

标签: c# .net ssh putty sharpssh


【解决方案1】:

经过一番研究,我发现了一个 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;
    }
}

【讨论】:

  • 您能提供更多信息吗?您将此代码添加到哪个文件或类中?谢谢!
  • @laughsloudly 我使用了来自linkSSH.NET 库。我创建了自己的类并使用SshClient 对象作为成员变量。
猜你喜欢
  • 2016-09-05
  • 2016-01-09
  • 2013-11-27
  • 2015-07-06
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
相关资源
最近更新 更多