2016-10-07 43 views
1

我構建了一個批處理文件,以便我可以將固件推送到600多個設備。使用echo y作爲pcp hostkey提示符的自動響應

如果我在命令提示符下,我可以在一行中運行以下命令來推送固件並在SSH密鑰提示符下回答yes。

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

The echo y |對SSH密鑰提示回答yes。但是,當我嘗試將其添加到批處理文件時,在命令提示符中出現錯誤,表示它不喜歡密碼。

具體來說,它看起來像這樣;

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地址。