在SSH.NET中使用PPK密钥进行身份验证我正在创建一个Windows服务以从SFTP服务器下载文件。为此,我使用了Renci.SshNet、Renci.SshNet.Common和Renci.SshNet.Sftp。我有这个代码:StringHost="HostName";内部端口=22;StringRemoteFileDirectory=Convert.ToString(ConfigurationManager.AppSettings["SourcePath"]);String用户名="用户名";字符串密码="*******";varKeybasedMethod=newKeyboardInteractiveAuthenticationMethod(用户名);KeybasedMethod.AuthenticationPrompt+=(sender,e)=>{e.Prompts.First().Response=password;};AuthenticationMethod[]methods=newAuthenticationMethod[]{newPrivateKeyAuthenticationMethod(Username,newPrivateKeyFile(@"Z:SFTPSETUPCJ22")),KeybasedMethod};ConnectionInfoconnectionInfo=newConnectionInfo(主机名、用户名、方法);使用(varsftp=newSftpClient(connectionInfo)){sftp.Connect();//...}我得到了异常。私钥文件无效。我无法弄清楚我的代码中缺少什么。下面是我使用FileZilla从客户端机器登录服务器时得到的日志文件。2017-04-0316:25:1981203状态:正在连接到abc.domainname.com...2017-04-0316:25:1981203跟踪:要执行“C:ProgramFilesFileZillaFTPClientfzsftp.exe“2017-04-0316:25:1981203响应:fzSftp启动2017-04-0316:25:1981203跟踪:CSftpControlSocket::ConnectParseResponse(fzSftp启动)2017-04-0316:25:1981203跟踪:CSftpControlSocket::SendNextCommand()2017-04-0316:25:1981203跟踪:CSftpControlSocket::ConnectSend()2017-04-0316:25:1981203命令:密钥文件“Z:SFTPSETUPCJ21_PVT.ppk"2017-04-0316:25:1981203跟踪:CSftpControlSocket::ConnectParseResponse()2017-04-0316:25:1981203跟踪:CSftpControlSocket::SendNextCommand()2017-04-0316:25:1981203跟踪:CSftpControlSocket::ConnectSend()2017-04-0316:25:1981203命令:密钥文件“Z:SFTPSETUPCJ22_PVT.ppk”2017-04-0316:25:1981203跟踪:CSftpControlSocket::ConnectParseResponse()2017-04-0316:25:1981203跟踪:CSftpControlSocket::SendNextCommand()2017-04-0316:25:1981203跟踪:CSftpControlSocket::ConnectSend()2017-04-0316:25:1981203命令:密钥文件“Z:SFTPSETUPCJ24_PVT.ppk”2017-04-0316:25:1981203跟踪:CSftpControlSocket::ConnectParseResponse()2017-04-0316:25:1981203跟踪:CSftpControlSocket::SendNextCommand()2017-04-0316:25:1981203跟踪:CSftpControlSocket::ConnectSend()2017-04-0316:25:1981203命令:密钥文件“Z:SFTPSETUPCJ90_PVT.ppk”2017-04-0316:25:1981203跟踪:CSftpControlSocket::ConnectParseResponse()2017-04-0316:25:1981203跟踪:CSftpControlSocket::SendNextCommand()2017-04-0316:25:1981203跟踪:CSftpControlSocket::ConnectSend()2017-04-0316:25:1981203命令:打开“CJ22@abc.domainname.com”222017-04-0316:25:1981203Trace:查找主机“abc.domainname.com”2017-04-0316:25:1981203Trace:连接到xxx.xxx.163.74端口222017-04-0316:25:2381203跟踪:服务器版本:SSH-2.0-1.82_sshlibGlobalscape2017-04-0316:25:2381203跟踪:使用SSH协议版本22017-04-0316:25:2381203跟踪:我们声明版本:SSH-2.0-PuTTY_Local:_Mar_28_2014_10:34:482017-04-0316:25:2481203跟踪:进行Diffie-Hellman组交换2017-04-0316:25:2481203跟踪:使用散列SHA-1进行Diffie-Hellman密钥交换2017-04-0316:25:2581203跟踪:主机密钥指纹是:2017-04-0316:25:2581203跟踪:ssh-rsa20486b:80:2c:5e:af:3f:2c:c7:f7:ef:4b:dd:85:55:32:fe2017-04-0316:25:2581203跟踪:初始化AES-256SDCTR客户端->服务器加密2017-04-0316:25:2581203跟踪:初始化HMAC-SHA1客户端->服务器MAC算法2017-04-0316:25:2581203跟踪:初始化AES-256SDCTR服务器->客户端加密2017-04-0316:25:2581203跟踪:初始化HMAC-SHA1服务器->客户端MAC算法2017-04-0316:25:2581203跟踪:成功从文件2017-04-0316:25:268120加载4个密钥对3跟踪:从“Z:SFTPSETUPCJ21_PVT.ppk”提供公钥2017-04-0316:25:2681203跟踪:服务器拒绝公钥2017-04-0316:25:2681203跟踪:从“Z:SFTPSETUPCJ22_PVT.ppk”提供公钥2017-04-0316:25:2681203Trace:接受公钥提供,尝试使用它进行身份验证。2017-04-0316:25:2981203跟踪:需要进一步的身份验证2017-04-0316:25:3081203跟踪:使用键盘交互式身份验证。inst_len:0,num_prompts:12017-04-0316:25:3081203命令:通过:*********2017-04-0316:25:3081203跟踪:授予访问权限2017-04-0316:25:3081203跟踪:打开会话通道2017-04-0316:25:3181203跟踪:启动shell/命令2017-04-0316:25:3181203状态:已连接到abc.domainname.com2017-04-0316:25:3381203跟踪:CSftpControlSocket::ConnectParseResponse()2017-04-0316:25:3381203跟踪:CSftpControlSocket::ResetOperation(0)2017-04-0316:25:3381203跟踪:CControlSocket::ResetOperation(0)2017-04-0316:25:3381203跟踪:CFileZillaEnginePrivate::ResetOperation(0)2017-04-0316:25:3381203状态:正在检索目录列表...2017-04-0316:25:3381203跟踪:CSftpControlSocket::SendNextCommand()2017-04-0316:25:3381203跟踪:CSftpControlSocket::ChangeDirSend()2017-04-0316:25:3381203命令:cd"/"2017-04-0316:25:3481203响应:新目录是:“/”2017-04-0316:25:3481203跟踪:CSftpControlSocket::ResetOperation(0)2017-04-0316:25:3481203跟踪:CControlSocket::ResetOperation(0)2017-04-0316:25:3481203跟踪:CSftpControlSocket::ParseSubcommandResult(0)2017-04-0316:25:3481203跟踪:CSftpControlSocket::ListSubcommandResult()2017-04-0316:25:3481203跟踪:状态=12017-04-0316:25:3481203跟踪:CSftpControlSocket::SendNextCommand()2017-04-0316:25:3481203跟踪:CSftpControlSocket::ListSend()2017-04-0316:25:3481203跟踪:状态=22017-04-0316:25:3481203命令:ls2017-04-0316:25:3481203状态:列出目录/2017-04-0316:25:3681203列表:drwxrw-rw-1用户组0Mar242015JKOB12017-04-0316:25:3681203列表:drwxrw-rw-1用户组0Apr310:40JKOB2017-04-0316:25:3681203跟踪:CSftpControlSocket::ListParseResponse()2017-04-0316:25:3681203跟踪:CSftpControlSocket::SendNextCommand()2017-04-0316:25:3681203跟踪:CSftpControlSocket::ListSend()2017-04-0316:25:3681203跟踪:state=32017-04-0316:25:3681203状态:计算服务器的时区偏移...2017-04-0316:25:3681203命令:mtime"JKOB"2017-04-0316:25:3781203响应:14912160402017-04-0316:25:3781203跟踪:CSftpControlSocket::ListParseResponse(1491216040)2017-04-0316:25:3781203状态:时区偏移量:服务器:0秒。本地:19800秒。差异:19800秒。2017-04-0316:25:3781203跟踪:CSftpControlSocket::ResetOperation(0)2017-04-0316:25:3781203跟踪:CControlSocket::ResetOperation(0)2017-04-0316:25:3781203状态:目录列表成功2017-04-0316:25:3781203跟踪:CFileZillaEnginePrivate::ResetOperation(0)2017-04-0316:27:2481203状态:与服务器断开连接2017-04-0316:27:2481203跟踪:CControlSocket::DoClose(64)2017-04-0316:27:2481203跟踪:CSftpControlSocket::ResetOperation(66)2017-04-0316:27:2481203跟踪:CControlSocket::ResetOperation(66)2017-04-0316:27:2481203跟踪:CFileZillaEnginePrivate::ResetOperation(66)2017-04-0316:27:2481203跟踪:CControlSocket::DoClose(64)2017-04-0316:27:2481203跟踪:CControlSocket::DoClose(64)2017-04-0316:27:2481203跟踪:CFileZillaEnginePrivate::ResetOperation(0)我已经从这里和其他来源尝试过多种解决方案一个接一个,但都没有用如果您有任何建议,那么非常欢迎。SSH.NET不支持.ppk密钥文件。您必须使用PuTTYgen将.ppk密钥转换为OpenSSH格式。请参阅如何将使用PuTTYgen(Windows)生成的SSH密钥对转换为ssh-agent和Keychain(Linux)使用的密钥对。问题编辑前的原始答案:您在FileZilla中使用多个私钥和键盘交互式身份验证:2017-04-0316:25:2681203跟踪:从“Z:SFTPSETUPCJ22_PVT.ppk”提供公钥2017-04-0316:25:2681203跟踪:接受公钥提议,尝试使用它进行身份验证。2017-04-0316:25:2981203Trace:需要进一步验证2017-04-0316:25:3081203Trace:使用键盘交互验证。inst_len:0,num_prompts:12017-04-0316:25:3081203命令:通过:************2017-04-0316:25:3081203Trace:访问被授予同时,您在代码中使用简单的密码身份验证:using(varsftp=newSftpClient(Host,Port,Username,Password))您怎么能期望它起作用?要实现多路复用器身份验证,您必须使用ConnectionInfo。以上就是C#学习教程:在SSH.NET中使用PPK密钥进行鉴权共享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——varkeybInterMethod=newKeyboardInteractiveAuthenticationMethod(username);keybInterMethod.AuthenticationPrompt+=(sender,e)=>{e.Prompts.First().Response=password;};AuthenticationMethod[]methods=newAuthenticationMethod[]{newPrivateKeyAuthenticationMethod(用户名,newPrivateKeyFile(privateKey)),keybInterMethod};ConnectionInfoconnectionInfo=newConnectionInfo(主机名、用户名、方法);使用(varsftp=newSftpClient(connectionInfo)){sftp.Connect();//...}本文采集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
