Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获得';权限被拒绝(密码)。';在SSH.NET中执行多因素身份验证(密钥和密码)时_C#_.net_Ssh_Sftp_Ssh.net - Fatal编程技术网

C# 获得';权限被拒绝(密码)。';在SSH.NET中执行多因素身份验证(密钥和密码)时

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不

我知道这个问题已经在其他帖子上被问过了,但我找不到任何令人满意的答案

我正在使用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文件的示例:

----开始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))
{
    // ...
}