我已经使用 Renci SSH.NET 连接到我们的 SFTP 服务器一年多了,在 SSIS 包中,没有任何问题。然后上周我开始收到失败消息,“已建立的连接被服务器中止”。我被告知 SHA1 已被禁用,仅支持 SHA2。我已经浏览了网上能找到的几乎所有内容,但没有任何效果。 SSH.NET 会不支持 SHA2 吗?我已经测试了 WinSCP 作为替代方案并且它有效,但除非必要,否则我宁愿不切换。
出于测试目的,我向桌面应用程序添加了一些代码。
连接中止后,这些是客户端
ConnectionInfo
属性。
当我尝试使用 SSH.NET 时,服务器团队的一个人向我发送了此信息。
SSH2_MSG_KEXINIT
SSH2_MSG_KEXINIT
SSH2_MSG_KEXDH_INIT
SSH 协议错误:密钥交换值无效。
闭门会议
List<AuthenticationMethod> authMethods = new List<AuthenticationMethod>();
authMethods.Add(new PasswordAuthenticationMethod(uName, pWord));
ConnectionInfo cInfo = new ConnectionInfo(host,uName,authMethods.ToArray());
cInfo.HmacAlgorithms["hmac-sha2-256"] =
new HashInfo(256, key => new SshNet.Security.Cryptography.HMACSHA256(key));
SftpClient client = new SftpClient(cInfo);
client.HostKeyReceived += (object obj, HostKeyEventArgs hke) =>
{
hke.CanTrust = true;
}
client.Connect();
确实,SSH.NET 似乎还不支持 rsa-sha2-256 和 rsa-sha2-512: https://github.com/sshnet/SSH.NET/issues/825
讨论包括临时解决方法。
从版本 2023.0.0 开始,SSH.NET 库支持 rsa-sha2-256 和 rsa-sha2-512,无需任何额外设置。
发布链接: https://github.com/sshnet/SSH.NET/releases/tag/2023.0.0