gpt4 book ai didi

.net - 在 SSH.NET 中检查 SFTP/SSH 指纹

转载 作者:行者123 更新时间:2023-12-04 17:08:38 28 4
gpt4 key购买 nike

我目前正在创建一个 SSIS 包,我需要连接到安全服务器来复制一些文件,我想通过服务器发送的公钥指纹验证连接。
我对这方面不是很熟悉,我能不能期望在连接时有指纹发送?
该包之前使用的是WinSCP,在代码中烘焙了指纹,格式为ssh-dss 1024 [hex representation] .我假设这种格式是从 PuTTY 中获取的,因为这是我在连接到新服务器时看到它的方式,它要求我进行验证。 WinSCP 照原样处理了验证。
我打算切换到 SSH.NET,它的机制要求我手动检查指纹。我可以仅基于十六进制来验证连接,还是还需要检查 key 长度和使用的算法?

最佳答案

您可以仅基于十六进制来执行此操作-首先您需要编写(或复制/使用)一个实用程序方法来将您的十六进制字符串转换为字节数组(这取决于您的十六进制字符串的格式)-示例下面用于转换以冒号分隔的字符串(例如“1d:c1:5a:71:c4:8e:a3:ff:01:0a:3b:46:17:6f:e1:52”)

public static byte[] ConvertFingerprintToByteArray( String fingerprint )
{
return fingerprint.Split( ':' ).Select( s => Convert.ToByte( s, 16 ) ).ToArray();
}
然后您只需附加到 HostKeyReceived SftpClient事件目的。
SftpClient sftpClient = new SftpClient( Hostname, Username, Password );
sftpClient.HostKeyReceived += delegate ( object sender, HostKeyEventArgs e )
{
var b = ConvertFingerprintToByteArray(
"1d:c1:5a:71:c4:8e:a3:ff:01:0a:3b:46:17:6f:e1:52" );
if( e.FingerPrint.SequenceEqual( b ) )
e.CanTrust = true;
else
e.CanTrust = false;
};
如果此检查失败,则 SSH.NET 将抛出 SshConnectionException – 带有“ key 交换协商失败”的消息。
希望这可以帮助。

关于.net - 在 SSH.NET 中检查 SFTP/SSH 指纹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31948661/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com