gpt4 book ai didi

c# - 使用 SharpSSH 时出现身份验证失败错误

转载 作者:行者123 更新时间:2023-11-30 12:30:40 25 4
gpt4 key购买 nike

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

我的要求是从 C# 应用程序在服务器上运行命令(就像我们使用 PuTTY 客户端)并将响应存储在 字符串中 用于稍后处理的变量。

经过一些研究,我发现 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)

最佳答案

经过一些研究,我找到了一个 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;
}
}

关于c# - 使用 SharpSSH 时出现身份验证失败错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15668595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com