Почему я получаю SessionOptions.SshHostKeyFingerprint не установлен. хотя у меня есть отпечаток пальца в сценарии

Я использую SFTP для передачи файлов на удаленный сервер, но продолжаю получать

SessionOptions.SshHostKeyFingerprint не установлен.

Я сослался на эту документацию из WinSCP .NET Assembly и COM-библиотеки WinSCP.

Что я делаю неправильно? Смотрите сценарий ниже:

try
{
    # Load WinSCP .NET assembly
    Add-Type -Path "WinSCPnet.dll"

    # Setup session options
    $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
        Protocol = [WinSCP.Protocol]::Sftp
        HostName = "psftp-nesam.ms.com"
        UserName = "test"
        Password = "MSR4sssssnd5"
        SshHostKeyFingerprint = "ssh-rsa 1024 +3t0xkOMWqfA7IaH0itjW/w7FQN+EtVyLDMTXk+D300=
    ssh-rsa 1024 23:6f:82:11:ec:b1:1a:82:95:1b:ed:7e:96:24:d0:11"
    }

    $session = New-Object WinSCP.Session

    try
    {
        # Connect
        $session.Open($sessionOptions)

        # Upload files
        $transferOptions = New-Object WinSCP.TransferOptions
        $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary

        $transferResult =
            $session.PutFiles("E:\CMBPAID\BPAID0224_122700.csv", "/NESAMSCARIMED", $False, $transferOptions)

        # Throw on any error
        $transferResult.Check()

        # Print results
        foreach ($transfer in $transferResult.Transfers)
        {
            Write-Host "Upload of $($transfer.FileName) succeeded"
        }
    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose()
    }

    exit 0
}
catch
{
    Write-Host "Error: $($_.Exception.Message)"
    exit 1
}

person Javy    schedule 31.08.2018    source источник


Ответы (2)


С вашим кодом я получаю другое сообщение об ошибке (но это может быть основной причиной вашего сообщения об ошибке):

Указано недопустимое значение или свойство доступно только для чтения. Измените значение и попробуйте еще раз.

Что правильно, поскольку ваш синтаксис значения SshHostKeyFingerprint неверен.

Если вы хотите указать несколько альтернативных отпечатков пальцев, разделите их точкой с запятой, а не новой строкой:

SshHostKeyFingerprint = "ssh-rsa 1024 +3t0xkOMWqfA7IaH0itjW/w7FQN+EtVyLDMTXk+D300=;ssh-rsa 1024 23:6f:82:11:ec:b1:1a:82:95:1b:ed:7e:96:24:d0:11"

С этим изменением ваш код работает на меня.

person Martin Prikryl    schedule 31.08.2018

Самый простой способ получить правильный ключ - запустить приложение WinSCP, войти на сервер SFTP, к которому вы хотите получить доступ, а затем выбрать в раскрывающемся меню вверху «Сеансы-> Создать URL-адрес / код сеанса ...». Это отобразит красивое диалоговое окно с различными способами написания кода для подключения к этому сеансу. На вкладке «Код сборки .NET» есть весь код, необходимый для того же подключения, включая «SshHostKeyFingerprint».

person Michael Erickson    schedule 16.11.2019