这是我第一次使用 WinSCP .NET 客户端从远程 Linux PC 上传文件。如果我在没有定义
SshHostKeyFingerprint
的情况下运行以下代码,我会收到错误:
SessionOptions.Protocol 为 Protocol.Sftp 或 Protocol.Scp,但未设置 SessionOptions.SshHostKeyFingerprint
所以我认为必须定义一个
SshHostKeyFingerprint
,但我不知道在这里写什么。当我使用已知的 WinSCP 软件工具(协议:SFTP)连接到同一台 Linux PC 时,我只需输入主机名、用户名和密码,即可建立连接。当我使用我的代码时,为什么会被要求提供 SshHostKeyFingerprint
?在哪里可以找到远程服务器的SshHostKeyFingerprint
?
try
{
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
HostName = TagService.MAE_IP_PLC,
UserName = "manufact",
Password = "SUNRISE",
//SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx..." ???????????
};
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Upload files
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Binary;
TransferOperationResult transferResult;
transferResult =
session.PutFiles(@"c:\test\versions_840Dsl", "/card/siemens/versions.xml", false, transferOptions);
// Throw on any error
transferResult.Check();
// Print results
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
Console.WriteLine("Upload of {0} succeeded", transfer.FileName);
}
}
//return 0;
}
catch (Exception e)
{
Console.WriteLine("Error: {0}", e);
//return 1;
using (StreamWriter sw = File.AppendText(CommonClass.error_path))
{
sw.WriteLine("WinSCP Error " + e + " " + Convert.ToString(DateTime.Now));
}
}
WinSCP GUI 不需要验证主机密钥的说法是不正确的。每个像样的 SSH/SFTP 客户端都需要这样做。验证主机密钥是确保 SSH 连接安全的重要组成部分。您可能只是忘记了 GUI 要求您在第一次连接时验证主机密钥。
相关问题:
另请参阅 WinSCP 常见问题解答 在哪里获取 SSH 主机密钥指纹来授权服务器?
SshHostKeyPolicy.GiveUpSecurityAndAcceptAny
。