我正在开发一个应用程序,在其中使用 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 一起使用需要主机 key 。
当我直接使用 WinSCP 应用程序时,它会警告主机 key ,并且用户可以通过单击“复制 key ”按钮来复制主机 key 。
主机 key 将被复制到剪贴板,我们可以使用此 key 从 SFTP 或 SCP 下载文件。
还有一个选项可以让用户禁止使用主机 key 。
我想以编程方式禁止使用主机 key 。
如果需要任何其他信息,请告诉我。
最佳答案
“禁止使用主机 key ”是什么意思?
没有选项可以禁止在 WinSCP 应用程序中使用主机 key 。您可以选择接受主机 key 并记住它,接受 key 而不记住它,以及拒绝 key (并放弃连接)。
https://winscp.net/eng/docs/ssh_verifying_the_host_key
WinSCP .NET 程序集没有内置第一个选项,因为它(默认情况下)不保留任何配置,因此它无法在任何地方存储接受的 key 。这是设计使然。您的任务是设置 SessionOptions.SshHostKeyFingerprint
。要么:
对主机 key 指纹进行硬编码;
或从您的应用程序具有的任何配置加载它(即可能从您加载主机名或用户名的相同配置);
或缓存已知主机 key (通过将
SessionOption.SshHostKeyPolicy
设置为SshHostKeyPolicy.AcceptNew
或通过 explicitly implementing your own cache 。或者,如果您不关心主机 key (意味着您根本不关心安全性),您可以通过设置
SessionOption.SshHostKeyPolicy
让 WinSCP 无条件接受任何主机 key 到SshHostKeyPolicy.GiveUpSecurityAndAcceptAny
。但这仅适用于特殊情况,其中 SSH 安全性是不必要的开销。就像当您的应用程序和服务器都位于隔离网络中时一样。
另请参阅WinSCP .NET library: Connect to SFTP server without specifying SSH host key fingerprint .
您的代码没有显示 OpenSession
的实现,这是这里的关键部分,因此不清楚您要做什么。
关于c# - 使用 WinSCP 禁止在 SFTP 或 SCP 中使用主机 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24188707/