Nar*_*gir 2 c# sftp winscp public-key winscp-net
我正在开发一个应用程序,在其中使用 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;
}
Run Code Online (Sandbox Code Playgroud)
FTP 工作正常,但使用 SFTP 需要主机密钥。
当我直接使用 WinSCP 应用程序时,它会警告主机密钥,并且用户可以通过单击“复制密钥”按钮来复制主机密钥。
主机密钥将被复制到剪贴板,我们可以使用此密钥从 SFTP 或 SCP 下载文件。
还有一个选项可以让用户禁止使用主机密钥。
我想以编程方式禁止使用主机密钥。
如果需要任何其他信息,请告诉我。
“禁止使用主机密钥”是什么意思?
没有选项可以禁止在 WinSCP 应用程序中使用主机密钥。您可以选择接受主机密钥并记住它,接受密钥而不记住它,以及拒绝密钥(并放弃连接)。
https://winscp.net/eng/docs/ssh_verifying_the_host_key
WinSCP .NET 程序集没有内置第一个选项,因为它(默认情况下)不保留任何配置,因此它无法在任何地方存储接受的密钥。这是设计使然。您的任务是设置SessionOptions.SshHostKeyFingerprint. 任何一个:
硬编码主机密钥指纹;
或从您的应用程序具有的任何配置加载它(即可能从您加载主机名或用户名的相同配置);
或缓存已知的主机密钥(通过设置SessionOption.SshHostKeyPolicy或SshHostKeyPolicy.AcceptNew显式实现您自己的缓存.
或者,如果您不关心主机密钥(意味着您根本不关心安全性),您可以通过设置为 来使 WinSCP 无条件接受任何主机SessionOption.SshHostKeyPolicy密钥SshHostKeyPolicy.GiveUpSecurityAndAcceptAny。
但这仅适用于特殊情况,其中 SSH 安全性是不必要的开销。就像当您的应用程序和服务器都位于隔离网络中时一样。
您的代码没有显示 的实现OpenSession,这是这里的关键部分,因此不清楚您要做什么。