使用 echo y 作为对 pcp 主机密钥提示的自动响应

Using echo y as an automated response to a pcp hostkey prompt

我正在构建批处理文件,以便将固件推送到 600 多台设备。

如果我在命令提示符下,我可以 运行 在一行中执行以下命令,这将推送固件并对 SSH 密钥提示回答是。

echo y | pscp -v -scp -pw password C:\CNA1000\Firmware\CNA1504v1.1.7\CNA1504v1_1_7.run root@192.168.1.1:/tmp/.    

回显y |对 SSH 密钥提示回答是。但是,当我尝试将它添加到批处理文件时,我在命令提示符中收到一条错误消息,提示它不喜欢密码。

具体是这样的;

Using username "root".
root@192.168.1.1's password:
Sent password
Access denied
Access denied

然后它会自己重复,直到我按下 CTRL+C 来破坏批处理文件。

是否有更好的方法来执行此操作,以便我可以自动化该过程?

谢谢,

我最终使用 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:root@192.168.1.1/" ^
    "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 地址重复。

不要盲目回答"y",你会失去对man-in-the-middle attacks的保护。

您应该使用 -hostkey switch 和您的主机密钥指纹。


其实和你最后用的WinSCP是一样的。 WinSCP open command 也有 -hostkey 开关。

如果它在没有 -hostkey 开关的情况下也能正常工作,那是因为主机密钥缓存在 Windows 以前的一些 WinSCP 交互使用的注册表中。

同理,pscp也是如此。如果您之前以交互方式使用过 PuTTY 或 pscp(或 PuTTY 套件中的任何其他工具)并确认了主机密钥,它就会被缓存。以后自动使用会在没有确认的情况下通过。