我正在尝试使用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,net,ssh,putty,sharpssh 来源: https://codeday.me/bug/20190703/1370668.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。