0

我正在构建一个批处理文件,以便可以将固件推送到 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 来破坏批处理文件。

有没有更好的方法来做到这一点,以便我可以自动化这个过程?

谢谢,

4

2 回答 2

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: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 地址重复。

于 2017-02-16T14:35:05.013 回答
0

不要盲目地回答“y”,你会失去对中间人攻击的保护。

您应该使用带有主机密钥指纹的-hostkey开关。


实际上,您最终使用的 WinSCP 也是如此。WinSCPopen命令也有-hostkey开关。

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

同样,这与 pscp 相同。如果您在交互之前使用过 PuTTY 或 pscp(或 PuTTY 套件中的任何其他工具)并确认主机密钥,它将被缓存。后来的自动使用将在没有确认的情况下通过。

于 2017-06-07T13:12:38.767 回答