Вызов процесса SFTP из кода VBA - PullRequest
2 голосов
/ 02 января 2012

проблема - сохранение ключа в кеше Вопрос остановки приложения VBA

Я использую pscp.exe для передачи файлов из windows на Linux-машину.

Примечание: pscp.exe существует в моем коде VBA (этот клиент является частью инструментов PuTTY)

Когда я копирую файлы со своего компьютера на любую новую машину Linux, у меня возникает вопрос «Хранить ключ в кэше? (Да / нет)», и это прерывает мое приложение VBA (приложение VBA остановлено в процессе sftp).

Мне нужен совет, как игнорировать вопрос "Хранить ключ в кеше? (Да / нет)". Или, может быть, автоматически посылать ключ "y" из моего кода VBA? Или другое решение, как определено в реестре ПК перед запуском pscp.exe? Но как это сделать?

Пример из командной строки WIN XP (cmd)

Примечание: 192.9.200.120 (IP-адрес сервера Linux)

"D: ​​\ Documents and Settings \ udavid \ pscp.exe" -sftp -l root -pw pass123 «D: \ Documents and Settings \ udavid \ Desktop \ scan_ip.ksh» 192.9.200.120:/var/tmp

CMD выход:

The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 1024 15:e1:ce:4f:8e:4e:7b:61:14:c3:df:3c:b1:50:67:b6
If you trust this host, enter "y" to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this host, press Return to abandon the
connection.
Store key in cache? (y/n)

Пример вывода CMD, если я использую флаг -batch (pscp.exe -batch)

The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 d5:80:49:7f:69:f1:29:7c:1f:99:ec:c9:f4:b2:6f:a0
Connection abandoned.
Lost connection

                  ---  Example from my VBA code ---
Const cstrSftp As String = """D:\documents and settings\udavid\pscp.exe"""
Dim strCommand As String
Dim pUser As String
Dim pPass As String
Dim pHost As String
Dim pFile As String
Dim pRemotePath As String
pUser = "root"
pPass = "pass123"
pHost = "xxx.xxx.xxx.xxx" xxx.xxx.xxx.xxx - any server new IP
pFile = """D:\Documents and Settings\udavid\Desktop\scan_ip.ksh"""
pRemotePath = "/var/tmp"

strCommand = cstrSftp & " -sftp -l " & pUser & " -pw " & pPass & " " & pFile & " " & pHost & ":" & pRemotePath

Debug.Print strCommand
Shell strCommand, 1

Ответы [ 3 ]

0 голосов
/ 03 января 2012

Помощь (pscp /?) дает вам ответ.Вы должны передать -batch, чтобы отключить все подобные подсказки.

Возможно, вы также захотите правильно заключить в кавычки ваши параметры, чтобы пробелы и кавычки в значениях не мешали.

0 голосов
/ 03 января 2012

Вы можете использовать Shell "cmd /c echo y | " & strCommand, 1 в качестве рекомендуемого быстрого взлома.

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

With New cExec
    .Run "d:\downloads\pscp.exe", sParams, True
    Do While Not .AtEndOfOutput
        If InStr(.ReadLineOutput, "(y/n)") Then
            .WriteInput "y"
        End If
    Loop
End With
0 голосов
/ 02 января 2012

Попробуйте это:

 echo y|"C:\Program Files\PuTTY\pscp.exe"  -sftp -l root -pw pass123 C:\scan_ip.ksh $server:/var/tmp

Он будет "нажимать" y на стандартный ввод вашей программы.

...