Запретить использование ключа хоста в SFTP или SCP с помощью WinSCP

Я работаю над приложением, в котором я загружаю файлы с помощью сборки 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.

Также существует опция, позволяющая пользователю запретить использование ключа хоста.

Я хочу программно запретить использование ключа хоста.

Сообщите мне, если потребуется дополнительная информация.


person Narendra Jangir    schedule 12.06.2014    source источник


Ответы (1)


Что вы имеете в виду под запретить использование ключа хоста?

Нет возможности запретить использование ключа хоста в приложении WinSCP. У вас есть возможность принять ключ хоста и запомнить его, принять ключ, не запоминая его, и отклонить ключ (и отказаться от соединения).
https://winscp.net/eng/docs/ssh_verifying_the_host_key

Сборка WinSCP .NET не имеет встроенной первой опции, поскольку она (по умолчанию) не сохраняет никакой конфигурации, поэтому она не может нигде хранить принятые ключи. Это задумано. Ваша задача - установить SessionOptions.SshHostKeyFingerprint. Либо:

  • жестко запрограммировать отпечаток ключа хоста;

  • или загрузите его из любой конфигурации вашего приложения (то есть, возможно, из той же конфигурации, которую вы загружаете имя хоста или имя пользователя);

  • или реализовать кэш ключей хоста SSH (известные хосты).

  • или, если вам не нужен ключ хоста (это означает, что вы вообще не заботитесь о безопасности), вы можете заставить WinSCP безоговорочно принимать любой ключ хоста, используя _ 2_.

    Но это только для использования в исключительных ситуациях, когда безопасность SSH не требует дополнительных затрат. Например, когда и ваше приложение, и сервер находятся в изолированной сети.

    См. Также Библиотека WinSCP .NET: подключение к серверу SFTP без указания отпечатка ключа хоста SSH.


В вашем коде не показана реализация OpenSession, что является ключевым моментом, поэтому непонятно, что вы пытаетесь сделать.

person Martin Prikryl    schedule 12.06.2014