WinSCP Session.ScanFingerprint() 的正确语法是什么?
What is the correct syntax for WinSCP Session.ScanFingerprint()?
我需要使用 WinSCP API 以编程方式从我们网络上的远程协议设备检索指纹。现在,这是通过打开 Windows UI WinSCP 会话并从即将缓存指纹时显示的弹出窗口 window 中转录指纹来完成的。
我在文档中看到我可以为此使用 Session.ScanFingerprin
t,但它似乎返回一个 ASCII 字符串:
ssh-rsa 1040 Rrt2/hXxs+i3Ugz1YeZUXIk/gjliFNyyA9WHBYCu0m8=
而不是我期望的十六进制编码值:
ssh-rsa 1040 ef:aa:a1:30:79:12:c7:f8:02:36:d0:ac:71:6b:5b:24
ScanFingerprint
需要一个 algorithm
参数,我将其作为字符串 "SHA-256"
提供;我找不到任何例子来说明这是否正确。
这是我使用的代码:
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Scp,
HostName = "xxx.xxx.xxx.xxx", // IP address
UserName = "root",
Password = "root",
//SshHostKeyFingerprint = fingerprint
GiveUpSecurityAndAcceptAnySshHostKey=true
};
sessionOptions.AddRawSettings("AuthGSSAPI", "1");
sessionOptions.AddRawSettings("Cipher", "aes,blowfish,3des,chacha20,WARN,arcfour,des");
sessionOptions.AddRawSettings("KEX", "ecdh,dh-gex-sha1,dh-group14-sha1,dh-group1-sha1,rsa,WARN");
Session session;
using (session = new Session())
{
//session.DisableVersionCheck = true;
try
{
Log("Opening session");
string fingerprint = null;
fingerprint = session.ScanFingerprint(sessionOptions,"SHA-256");
string t = fingerprint;
}
catch (Exception ex)
{
Log("WinSCP: " + ex.Message);
return;
}
}
我是否提供了错误的算法参数,或者我是否需要重新解释我正在检索的指纹字符串?
这是 Base64 编码的 SHA-256 指纹,为 algorithm = "SHA-256"
返回:
ssh-rsa 1040 Rrt2/hXxs+i3Ugz1YeZUXIk/gjliFNyyA9WHBYCu0m8=
这是十六进制编码的 MD5 指纹,返回 algorithm = "MD5"
:
ssh-rsa 1040 ef:aa:a1:30:79:12:c7:f8:02:36:d0:ac:71:6b:5b:24
参见 documentation for algorithm
argument of Session.ScanFingerprint
。
如果可能,您应该使用 SHA-256,因为 MD5 不再被认为是安全的。
WinSCP 理解两者(两者都可用于 SessionOptions.SshHostKeyFingerprint
,用于 WinSCP 脚本或其他任何地方的 -hostkey
开关)。
另请注意,无需为 Session.ScanFingerprint
调用设置 UserName
、Password
、GiveUpSecurityAndAcceptAnySshHostKey
、AuthGSSAPI
或 Cipher
。
我需要使用 WinSCP API 以编程方式从我们网络上的远程协议设备检索指纹。现在,这是通过打开 Windows UI WinSCP 会话并从即将缓存指纹时显示的弹出窗口 window 中转录指纹来完成的。
我在文档中看到我可以为此使用 Session.ScanFingerprin
t,但它似乎返回一个 ASCII 字符串:
ssh-rsa 1040 Rrt2/hXxs+i3Ugz1YeZUXIk/gjliFNyyA9WHBYCu0m8=
而不是我期望的十六进制编码值:
ssh-rsa 1040 ef:aa:a1:30:79:12:c7:f8:02:36:d0:ac:71:6b:5b:24
ScanFingerprint
需要一个 algorithm
参数,我将其作为字符串 "SHA-256"
提供;我找不到任何例子来说明这是否正确。
这是我使用的代码:
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Scp,
HostName = "xxx.xxx.xxx.xxx", // IP address
UserName = "root",
Password = "root",
//SshHostKeyFingerprint = fingerprint
GiveUpSecurityAndAcceptAnySshHostKey=true
};
sessionOptions.AddRawSettings("AuthGSSAPI", "1");
sessionOptions.AddRawSettings("Cipher", "aes,blowfish,3des,chacha20,WARN,arcfour,des");
sessionOptions.AddRawSettings("KEX", "ecdh,dh-gex-sha1,dh-group14-sha1,dh-group1-sha1,rsa,WARN");
Session session;
using (session = new Session())
{
//session.DisableVersionCheck = true;
try
{
Log("Opening session");
string fingerprint = null;
fingerprint = session.ScanFingerprint(sessionOptions,"SHA-256");
string t = fingerprint;
}
catch (Exception ex)
{
Log("WinSCP: " + ex.Message);
return;
}
}
我是否提供了错误的算法参数,或者我是否需要重新解释我正在检索的指纹字符串?
这是 Base64 编码的 SHA-256 指纹,为 algorithm = "SHA-256"
返回:
ssh-rsa 1040 Rrt2/hXxs+i3Ugz1YeZUXIk/gjliFNyyA9WHBYCu0m8=
这是十六进制编码的 MD5 指纹,返回 algorithm = "MD5"
:
ssh-rsa 1040 ef:aa:a1:30:79:12:c7:f8:02:36:d0:ac:71:6b:5b:24
参见 documentation for algorithm
argument of Session.ScanFingerprint
。
如果可能,您应该使用 SHA-256,因为 MD5 不再被认为是安全的。
WinSCP 理解两者(两者都可用于 SessionOptions.SshHostKeyFingerprint
,用于 WinSCP 脚本或其他任何地方的 -hostkey
开关)。
另请注意,无需为 Session.ScanFingerprint
调用设置 UserName
、Password
、GiveUpSecurityAndAcceptAnySshHostKey
、AuthGSSAPI
或 Cipher
。