Как передать значение в подсказку psftp

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

psftp [email protected] -pw password -b psftpscript.txt

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

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

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

Ответ 1

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

Ответ 2

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

echo y | psftp [email protected] -l username -pw password -b psftpscript.txt

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

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

Ответ 3

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

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

Ответ 4

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

psftp [email protected] -pw password -b psftpscript.txt < filename.txt

Благодаря Джеймсу из http://www.sqlservercentral.com/Forums/Topic281954-9-1.aspx для такого простого решения

Ответ 5

В .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();

Ответ 6

У меня возникла проблема, когда у меня не было права на удаление\переименовать файл по удаленному серверу, а файлы содержат отметку времени. Поэтому мне нужно было скачать файлы по имени. 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 [email protected] -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...", следующие две строки только что закончили действие, а строка "C:\SFTP\psftp [email protected] -b C:\SFTP\temp.txt" выполнить его.

в качестве результатов temp.txt выглядит так:

cd outbound 
mget file_20151008*.csv 
quit 
close 

Ответ 7

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

Usage: psftp [options] [[email protected]]host

Try:

psftp -pw password -b psftpscript.txt [email protected]

Ответ 8

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

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

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