C# 获得';权限被拒绝(密码)。';在SSH.NET中执行多因素身份验证(密钥和密码)时
我知道这个问题已经在其他帖子上被问过了,但我找不到任何令人满意的答案 我正在使用Renci.SSH(C#中的SSH.NET版本2016.1.0)连接到SFTP。我有一个使用SSH密钥和密码连接的SFTP服务器 当我在我的计算机上通过WinSCP连接时,它工作得非常好。我想从我的C#代码中做同样的事情,但我得到: Renci.SshNet.Common.SshAuthenticationException:“权限被拒绝(密码)。” 我的PPP文件是由PuTTYgen生成的,看来Renci.SSH不支持PuTTY格式。实际上,使用ppk文件,我得到一个: Renci.SshNet.Common.SshException:“私钥文件无效。” 因此,我必须使用PuTTY密钥生成器转换-->使用RSA导出OpenSSH密钥,将.ppk转换为OpenSSH格式 下面是生成的.ppk文件的示例:C# 获得';权限被拒绝(密码)。';在SSH.NET中执行多因素身份验证(密钥和密码)时,c#,.net,ssh,sftp,ssh.net,C#,.net,Ssh,Sftp,Ssh.net,我知道这个问题已经在其他帖子上被问过了,但我找不到任何令人满意的答案 我正在使用Renci.SSH(C#中的SSH.NET版本2016.1.0)连接到SFTP。我有一个使用SSH密钥和密码连接的SFTP服务器 当我在我的计算机上通过WinSCP连接时,它工作得非常好。我想从我的C#代码中做同样的事情,但我得到: Renci.SshNet.Common.SshAuthenticationException:“权限被拒绝(密码)。” 我的PPP文件是由PuTTYgen生成的,看来Renci.SSH不
----开始RSA私钥-----
s8KrhoAE5MFNyd4P/zPmxBkOh3ZwIAXG7ns9srdNuFv0/UBu4tsRAoGBAMD0JIo1
808CfyBDkhpGXk8eQzIskFDA+Hopjdamakhdhufca5gezzgnsfnkhy+2tD0HZVAW
rZFwpBiJezc4apAnh8ecgChvsZmCc9vTS2N+Da8MjptYFc0wJRExj1bUXbImIFA5
C7HtAoGBAOcNv6EJtzW80QN/0zFrBZ93vwI2BQ/G7A0TCDKRZZUOFHS4R0VQ014
Vib+M5+D2V9QY91ZCRGRSxPhdi2ComoQxNVNNHFNHPNAQBDKUQ4QVVC+2dNS8o5+
s8KrhoAE5MFNyd4P/zPmxBkOh3ZwIAXG7ns9srdNuFv0/UBu4tsRAoGBAMD0JIo1
wFmOcvjya9upNZW28J6SCPtezddQcHUCysl0EDe8b+uA/Cn7+oFpSgUOraFJ3eAC
TIRCVWOXAJQN08SSOIPMJNIIRH00BCH6MVUJGAGPTPSVENGNWBQWGFHRUU/9gvH
b7XIKYXLV27a7vz+KxGehmicxMkuuaf0E9FW5EEPTCxWxOaefyVJVGIIPAKxHF7
808CfyBDkhpGXk8eQzIskFDA+Hopjdamakhdhufca5gezzgnsfnkhy+2tD0HZVAW
rZFwpBiJezc4apAnh8ecgChvsZmCc9vTS2N+Da8MjptYFc0wJRExj1bUXbImIFA5
C7HtAoGBAOcNv6EJtzW80QN/0zFrBZ93vwI2BQ/G7A0TCDKRZZUOFHS4R0VQ014
Vib+M5+D2V9QY91ZCRGRSxPhdi2ComoQxNVNNHFNHPNAQBDKUQ4QVVC+2dNS8o5+
808CfyBDkhpGXk8eQzIskFDA+Hopjdamakhdhufca5gezzgnsfnkhy+2tD0HZVAW
rZFwpBiJezc4apAnh8ecgChvsZmCc9vTS2N+Da8MjptYFc0wJRExj1bUXbImIFA5
C7HtAoGBAOcNv6EJtzW80QN/0zFrBZ93vwI2BQ/G7A0TCDKRZZUOFHS4R0VQ014
Vib+M5+D2V9QY91ZCRGRSxPhdi2ComoQxNVNNHFNHPNAQBDKUQ4QVVC+2dNS8o5+
s8KrhoAE5MFNyd4P/zPmxBkOh3ZwIAXG7ns9srdNuFv0/UBu4tsRAoGBAMD0JIo1
wFmOcvjya9upNZW28J6SCPtezddQcHUCysl0EDe8b+uA/Cn7+oFpSgUOraFJ3eAC
TIRCVWOXAJQN08SSOIPMJNIIRH00BCH6MVUJGAGPTPSVENGNWBQWGFHRUU/9gvH
p6VRzmTNYJUaU/C/zJqdd2YFp18kcUzqdfptlIv20qoFmFKI4Z/Fiexep7pW8RZL
b7XIKYXLV27a7vz+KxGehmicxMkuuaf0E9FW5EEPTCxWxOaefyVJVGIIPAKxHF7
808CfyBDkhpGXk8eQzIskFDA+Hopjdamakhdhufca5gezzgnsfnkhy+2tD0HZVAW
rZFwpBiJezc4apAnh8ecgChvsZmCc9vTS2N+Da8MjptYFc0wJRExj1bUXbImIFA5
a6872Eh69Z3WkD8NGJZ1t/gApUxzdgGAckoRoS2Gz71gUuU=
-----结束RSA私钥-----
然后我连接到SFTP服务器,如下所示:
private static void CreateSftpSession(FtpConnectionSettings settings, Action<IFtpSession> onSessionOpen)
{
var methods = new List<AuthenticationMethod>();
methods.Add(new PasswordAuthenticationMethod(settings.UserName, settings.UserPassword));
if (!string.IsNullOrEmpty(settings.PrivateKeyPath))
{
var keyFiles = new[] { new PrivateKeyFile(settings.PrivateKeyPath) };
methods.Add(new PrivateKeyAuthenticationMethod(settings.UserName, keyFiles));
}
var connectionInfo = new ConnectionInfo(settings.Host, settings.Port, settings.UserName, methods.ToArray());
using (SftpClient sftpClient = new SftpClient(connectionInfo))
{
SftpSession sftpSession = new SftpSession(sftpClient);
sftpClient.Connect();
onSessionOpen(sftpSession);
sftpClient.Disconnect();
}
}
private static void CreateSftpSession(FtpConnectionSettings,操作onSessionOpen)
{
var方法=新列表();
添加(新的PasswordAuthenticationMethod(settings.UserName,settings.UserPassword));
如果(!string.IsNullOrEmpty(settings.PrivateKeyPath))
{
var keyFiles=new[]{new PrivateKeyFile(settings.PrivateKeyPath)};
添加(新的PrivateKeyAuthenticationMethod(settings.UserName,keyFiles));
}
var connectionInfo=new connectionInfo(settings.Host、settings.Port、settings.UserName、methods.ToArray());
使用(SftpClient SftpClient=新的SftpClient(connectionInfo))
{
SftpSession SftpSession=新SftpSession(sftpClient);
sftpClient.Connect();
开放会话(sftpSession);
sftpClient.Disconnect();
}
}
调用sftpClient.Connect()
,将引发异常
你觉得我做的有什么不对吗
非常感谢你的帮助
下面是根据请求成功进行WinSCP连接的日志:
。2019-12-10 14:54:45.922
-------------------------------------------------------------------------- . 2019-12-10 14:54:45.922 WinSCP版本5.15.9(构建10071)(操作系统
10.0.17763-Windows 10企业版)。2019-12-10 14:54:45.922配置:HKCU\Software\Martin Prikryl\WinSCP 2\。2019-12-10
14:54:45.922日志级别:正常。2019-12-10 14:54:45.922当地时间
帐户:XXXX\xxx。2019-12-10 14:54:45.922工作目录:
C:\ProgramFiles(x86)\WinSCP。2019-12-10 14:54:45.922过程ID:
20716 . 2019-12-10 14:54:45.923命令行:“C:\Program Files
(x86)\WinSCP\WinSCP.exe”。2019-12-10 14:54:45.923时区:
当前时间:格林尼治标准时间:格林尼治标准时间:格林尼治标准时间+1(西欧标准时间),夏令时:格林尼治标准时间+2
(欧洲夏令时),DST开始时间:2019年3月31日,DST结束时间:2019年10月27日。
2019-12-10 14:54:45.923登录时间:2019年12月10日星期二2:54:45
下午。2019-12-10 14:54:45.923
-------------------------------------------------------------------------- . 2019-12-10 14:54:45.923会话名称:my_ftp_user@my_ftp_host.com
(现场)。2019-12-10 14:54:45.923主机名:my_ftp_Host.com(端口:
6671) . 2019-12-10 14:54:45.924用户名:my_ftp_用户(密码:是,
密钥文件:是,密码短语:否)。2019-12-10 14:54:45.924隧道:没有。
2019-12-10 14:54:45.924传输协议:SFTP(SCP)。2019-12-10
14:54:45.924 Ping类型:关闭,Ping间隔:30秒;超时:15秒。
2019-12-10 14:54:45.924禁用名称:否。2019-12-10 14:54:45.924
代理:没有。2019-12-10 14:54:45.924发送缓冲区:262144。2019-12-10
14:54:45.924 SSH协议版本:2;压缩:没有。2019-12-10
14:54:45.924绕过身份验证:否。2019-12-1014:54:45.924试试看
代理人:是的;代理转发:否;TIS/加密卡:否;基:是的;GSSAPI:
对2019-12-10 14:54:45.924 GSSAPI:转发:否;Libs:
gssapi32,sspi,定制;自定义:。2019-12-10 14:54:45.924密码:
aes、chacha20、河豚、3des、WARN、arcfour、des;没有。2019-12-10
14:54:45.924 KEX:
ecdh、dh-gex-sha1、dh-group14-sha1、rsa、WARN、dh-group1-sha1。2019-12-10
14:54:45.924 SSH错误:
自动,自动,自动,自动,自动,自动,自动,自动,自动,自动,自动,自动,自动,自动。
2019-12-10 14:54:45.924简单频道:是。2019-12-
var methods = new List<AuthenticationMethod>();
if (!string.IsNullOrEmpty(settings.PrivateKeyPath))
{
var keyFiles = new[] { new PrivateKeyFile(settings.PrivateKeyPath) };
methods.Add(new PrivateKeyAuthenticationMethod(settings.UserName, keyFiles));
}
methods.Add(new PasswordAuthenticationMethod(settings.UserName, settings.UserPassword));
var connectionInfo =
new ConnectionInfo(settings.Host, settings.Port, settings.UserName, methods.ToArray());
using (SftpClient sftpClient = new SftpClient(connectionInfo))
{
// ...
}