Как передать значение в приглашение psftp - PullRequest
13 голосов
/ 28 сентября 2011

Я создаю файл сценария программно и вызываю psftp.exe следующим образом:

psftp user@hostname.com -pw password -b psftpscript.txt

но запрашивает ввод пользователя

Ключ хоста сервера не кэшируется в реестре. У вас нет гарантировать, что сервер - это компьютер, который вы считаете. Отпечаток ключа rsa2 сервера: [ssh-rsa 1024 somekey] Если вы доверяете этому host, введите "y", чтобы добавить ключ в кеш PuTTY и продолжить подключения. Если вы хотите продолжить подключение только один раз, без добавив ключ в кеш, введите "n". Если вы не доверяете этому хосту, нажмите Return, чтобы разорвать соединение. Хранить ключ в кеше? (Y / N)

Мне нужно, чтобы он был полностью быстрым, бесплатным, автоматическим. Я пробовал параметр -batch, но он просто разрывает соединение

Ответы [ 8 ]

21 голосов
/ 22 января 2013

У меня была та же проблема с запуском автоматического сценария в среде «песочницы» Windows Server 2008. Я запустил следующую команду, которая вводит y в приглашении для вас:

echo y | psftp user@hostname.com -l username -pw password -b psftpscript.txt

Надеюсь, это поможет!

Примечание: Мне нужно было только запустить эхо-сигнал один раз, и удаление его для второго запуска больше не требовало кэширования ключа.

10 голосов
/ 21 мая 2015

при первом запуске он покажет вам ваш ключ для сервера. Скопируйте ключ и затем в командной строке укажите ключ своего хоста следующим образом:

psftp yourhostAddress -hostkey 06:15:d4:3b:e4:e8:23:c0:d6:6d:45:47:7e:bd:8d:74 -l yourusername -pw yourpassword -batch

3 голосов
/ 26 июня 2012

Вы можете создать в качестве ввода файл, содержащий только y и возврат каретки, а затем выполнить

psftp user@hostname.com -pw password -b psftpscript.txt < filename.txt

Спасибо Джеймсу из http://www.sqlservercentral.com/Forums/Topic281954-9-1.aspx за столь простое решение

2 голосов
/ 01 июля 2012

В .Net я обнаружил, что описанный выше метод работает не совсем так, как ожидалось. Хитрость заключалась в том, чтобы использовать встроенное перенаправление ввода .Net, а не оператор <. Вот как теперь выглядит код:

System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "c:\\psftp.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;            
proc.StartInfo.Arguments = strIP + " -v -l " + strUsername + " -pw " + strPassword + " -b " + strBatchFilename;            
proc.Start();
StreamWriter myStreamWriter = proc.StandardInput;
myStreamWriter.WriteLine("Y\n"); //override the public key question <---
myStreamWriter.Close();
proc.WaitForExit();
proc.Close();
1 голос
/ 11 октября 2015

У меня была проблема, когда у меня не было разрешения на удаление \ переименование файла через удаленный сервер, и файлы содержат метку времени.Поэтому мне нужно было скачивать файлы по имени.Psftp не может принимать параметры (или каким-либо другим способом, о котором я знал), и я не мог динамически изменять имена файлов в соответствии с текущей датой.

Итак, из пакетного файла, который я вызываюКоманды psftp Я создал команды динамически и с файлом с соответствующей отметкой времени.Я мог бы копировать только сегодняшние файлы, что лучше, чем копировать каждый раз каждый раз.

cd "C:\CX\FTP\IG\Files"  
echo cd outbound > C:\SFTP\temp.txt
echo mget file_%date:~10,4%%date:~4,2%%date:~7,2%*.csv >> C:\SFTP\temp.txt
echo quit >> C:\SFTP\temp.txt
echo close >> C:\SFTP\temp.txt
C:\SFTP\psftp cellxpert-prod@ftp.nadex.com -b C:\SFTP\temp.txt
close
exit

"echo cd outbound> C: \ SFTP \ temp.txt" очистил старый файл и начал писать содержимоенового файла."Echo mget file_% date: ~ 10,4 %% date: ~ 4,2 %% date: ~ 7,2% .csv >> C: \ SFTP \ temp.txt" привело к созданиюкоманда: "mget file_20151008 .csv", которая загружает все файлы, которые начинаются с "file_20151008 ...", следующие 2 строки только что завершили действие, а строка "C: \ SFTP \ psftp cellxpert-prod@ftp.nadex.com -b C: \ SFTP \ temp.txt "выполнить его.

, так как результаты temp.txt выглядят так:

cd outbound 
mget file_20151008*.csv 
quit 
close 
0 голосов
/ 12 ноября 2014

Это не отвечает на ваш вопрос напрямую, но предоставляет возможный обходной путь:

Запустите командную строку от имени пользователя, который будет запускать ваш скрипт и вручную принять сертификат. Тогда при будущих подключениях у вас не будет проблемы.

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

0 голосов
/ 26 февраля 2013

Я думаю, что есть проблема с вашей командной строкой.

Usage: psftp [options] [user@]host

Попробуйте:

psftp -pw password -b psftpscript.txt user@hostname.com
0 голосов
/ 30 сентября 2011

В итоге я добавил ключ в кеш, введя 'y' в подсказку. Я должен был сделать это только один раз, и после этого больше никаких подсказок, это работает хорошо.

...