我无法使用.NET应用程序中的Renci.SshNet库远程连接到Mac系统(OS X 10.10.5)。我正在使用的代码允许我连接到任何其他Linux操作系统,如RHL,Ubuntu等。我能够通过putty连接到这个Mac系统。但是当我尝试从我的.NET应用程序连接时,它给了我以下错误 -
找不到合适的身份验证方法来完成身份验证(publickey,键盘交互式)。来源 - Renci.SshNet
这是我的代码。请帮忙
public SshClient sshClient;
sshClient = new SshClient(ipAddress, port, username, password);
sshClient.KeepAliveInterval = TimeSpan.FromSeconds(60);
sshClient.Connect();
答案 0 :(得分:3)
根据对stackoverflow的各种贡献,发现mac要求键盘身份验证,而我的方法只有基于密码的身份验证。所以这个更新的代码都做了....感谢所有贡献者...
public SshClient sshClient;
KeyboardInteractiveAuthenticationMethod kauth = new KeyboardInteractiveAuthenticationMethod(username);
PasswordAuthenticationMethod pauth = new PasswordAuthenticationMethod(username, password);
kauth.AuthenticationPrompt += new EventHandler<Renci.SshNet.Common.AuthenticationPromptEventArgs>(HandleKeyEvent);
ConnectionInfo connectionInfo = new ConnectionInfo(ipAddress, port, username, pauth, kauth);
sshClient = new SshClient(connectionInfo);
sshClient.KeepAliveInterval = TimeSpan.FromSeconds(60);
sshClient.Connect();
以及密码提示事件的此事件处理程序代码
void HandleKeyEvent(Object sender, Renci.SshNet.Common.AuthenticationPromptEventArgs e)
{
foreach (Renci.SshNet.Common.AuthenticationPrompt prompt in e.Prompts)
{
if (prompt.Request.IndexOf("Password:", StringComparison.InvariantCultureIgnoreCase) != -1)
{
prompt.Response = password;
}
}
}