2016-10-07 5 views
1

Я создаю командный файл, чтобы я мог пропустить прошивку до 600 устройств.Использование echo y в качестве автоматизированного ответа на вызов командной строки pcp

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

echo y | pscp -v -scp -pw password C:\CNA1000\Firmware\CNA1504v1.1.7\CNA1504v1_1_7.run [email protected]:/tmp/.  

Echo y | отвечает да на подсказку ключей SSH. Однако, когда я пытаюсь добавить его в пакетный файл, я получаю сообщение об ошибке в командной строке, что ему не нравится пароль.

В частности, это выглядит так;

Using username "root". 
[email protected]'s password: 
Sent password 
Access denied 
Access denied 

, а затем он повторяется до тех пор, пока я не ударил CTRL + C, чтобы разбить пакетный файл.

Есть ли лучший способ сделать это, чтобы я мог автоматизировать процесс?

Спасибо,

+0

Не могли бы вы [изменить] ваш вопрос включить соответствующие части этого командного файла? – Kenster

+0

может быть, вы можете попробовать с SendKeys? – npocmaka

+1

Имеет ли пароль какие-либо символы, возможно, символ '%'? – rojo

ответ

0

Не слепо отвечать «y», вы теряете защиту от man-in-the-middle attacks.

Вы должны использовать -hostkey switch с вашим отпечатком ключа вашего хозяина.


На самом деле это то же самое с WinSCP, что вы в конечном итоге использовали. WinSCP open command также имеет переключатель -hostkey.

Если он работает без переключателя -hostkey, это связано с тем, что ключ хоста кэшируется в реестре Windows из предыдущего интерактивного использования WinSCP.

Аналогично, то же самое с pscp. Если бы вы использовали PuTTY или pscp (или любые другие инструменты из пакета PuTTY), прежде чем в интерактивном режиме, и если бы вы подтвердили ключ хоста, он получил бы кеширование. И позже автоматическое использование будет проходить без подтверждения.

0

Я закончил с использованием WinSCP.net для пакетного файла, чтобы правильно делать то, что я пытался сделать. Вот пример того, как сделать это с помощью WinSCP.net.

@echo off 

"C:\Program Files (x86)\WinSCP\WinSCP.com"^
    /log="C:\Program Files (x86)\WinSCP\WinSCP.log" /ini=nul^
    /command^
    "open scp://root:[email protected]/"^
    "Put C:\CNA1000\Firmware\CNA1504v1.1.7\CNA1504v1_1_7.run /tmp/."^
    "exit" 

set WINSCP_RESULT=%ERRORLEVEL% 
if %WINSCP_RESULT% equ 0 (
    echo Success 
) else (
    echo Error 
) 

exit /b %WINSCP_RESULT% 

И повторите для каждого IP-адреса.