我目前正在创建一个 SSIS 包,我需要连接到安全服务器来复制一些文件,并且我想通过服务器发送的公钥指纹来验证连接。
我对这方面不太熟悉,我是否总是期望连接时会发送指纹?
该软件包之前使用了WinSCP,并且指纹以以下格式烘焙到代码中:ssh-dss 1024 [hex representation]
。我假设此格式取自 PuTTY,因为这就是我在连接到新服务器时看到的格式,并且要求我进行验证。 WinSCP 按原样接受并处理验证。
我打算切换到 SSH.NET,它的机制要求我手动检查指纹。我可以仅根据十六进制验证连接,还是还需要检查密钥长度和使用的算法?
您可以仅基于十六进制来完成此操作 - 首先您需要编写(或复制/使用)一个实用程序方法来将十六进制字符串转换为字节数组(这取决于十六进制字符串的格式) - 示例下面用于转换由冒号分隔的字符串(例如“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
object.
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
– 带有一条消息“密钥交换协商失败”.
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)