使用WinSCP禁止在SFTP或SCP中使用主机密钥

时间:2014-06-12 15:50:36

标签: c# sftp public-key winscp 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;
}

FTP工作正常,但使用SFTP需要主机密钥。

当我直接使用WinSCP应用程序时,它会警告主机密钥,用户可以通过单击“复制密钥”按钮来复制主机密钥。

主机密钥将被复制到剪贴板,我们可以使用此密钥从SFTP或SCP下载文件。

还有一个选项,用户可以禁止使用主机密钥。

我想以编程方式禁止使用主机密钥。

如果需要任何其他信息,请告诉我。

1 个答案:

答案 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