我正在使用WinSCP .NET程序集(版本5.5.0.3839)下载文件的应用程序
我的下载文件代码如下:
public bool ReceiveFile(string ftpFilePath,out String downloadedFileName, String DestinationPath)
{
bool sendingStatus = false;
downloadedFileName = string.Empty;
try
{
if (sessionOptions != null)
{
using (Session session = new Session())
{
// Connect
bool isSessionOpened = OpenSession(session);
if (isSessionOpened)
{
// Upload files
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Automatic;
TransferOperationResult transferResult;
transferResult = session.GetFiles(ftpFilePath, DestinationPath, false, transferOptions);
// Throw on any error
transferResult.Check();
// Print results
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
sendingStatus = true;
downloadedFileName = transfer.FileName;
//We are breaking here because we are assuming that for one import batch setup only one file will be downloaded
break;
}
}
}
}
}
catch (Exception ex)
{
}
return sendingStatus;
}
FTP工作正常,但使用SFTP需要主机密钥。
当我直接使用WinSCP应用程序时,它会警告主机密钥,用户可以通过单击“复制密钥”按钮来复制主机密钥。
主机密钥将被复制到剪贴板,我们可以使用此密钥从SFTP或SCP下载文件。
还有一个选项,用户可以禁止使用主机密钥。
我想以编程方式禁止使用主机密钥。
如果需要任何其他信息,请告诉我。
答案 0 :(得分:3)
“禁止使用主机密钥”是什么意思?
没有选项可以禁止在WinSCP应用程序中使用主机密钥。您可以选择接受主机密钥并记住它,接受密钥而不记住密钥,并拒绝密钥(并放弃连接)。
https://winscp.net/eng/docs/ssh_verifying_the_host_key
WinSCP .NET程序集没有内置的第一个选项,因为它(默认情况下)不保留任何配置,因此它无法将接受的键存储在任何位置。这是设计的。设置SessionOptions.SshHostKeyFingerprint
是您的任务。之一:
您的代码没有显示OpenSession
的实现,这里的关键部分是什么,因此您不清楚自己要做什么。
如果您不关心主机密钥(意味着您根本不关心安全性),则可以使用SessionOption.GiveUpSecurityAndAcceptAnySshHostKey
无条件地使WinSCP接受任何主机密钥。 />
但这仅适用于特殊情况,其中SSH安全性是不必要的开销。就像你的应用程序和服务器都在一个孤立的网络中一样。
另见WinSCP .NET library: Connect to SFTP server without specifying SSH host key fingerprint。