![使用 plink 自动将服务器主机密钥存储在缓存中](https://linux22.com/image/593839/%E4%BD%BF%E7%94%A8%20plink%20%E8%87%AA%E5%8A%A8%E5%B0%86%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%BB%E6%9C%BA%E5%AF%86%E9%92%A5%E5%AD%98%E5%82%A8%E5%9C%A8%E7%BC%93%E5%AD%98%E4%B8%AD.png)
我一直在尝试使用 plink 发出命令来从我的外部服务器检索信息。请注意,这些 plink 命令是从二进制文件运行的,不需要用户输入。是否有一个标志可以让我覆盖此错误消息并继续程序输出?
The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 **:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**
If you trust this host, enter "y" to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this host, press Return to abandon the
connection.
Store key in cache? (y/n)
谢谢你!
答案1
尝试在脚本中添加以下内容:
echo y | plink -ssh root@REMOTE_IP_HERE "exit"
这将把y
角色传递stdin
到plink
你得到将密钥存储在缓存中吗?(y/n)提示符,允许所有进一步的plink
命令通过而无需用户输入。该exit
命令将在建立 SSH 会话后关闭,以允许以下plink
命令运行。
下面是将外部服务器的 Unix 时间写入本地文件的示例脚本:
echo y | plink -ssh root@REMOTE_IP_HERE "exit"
plink -ssh root@REMOTE_IP_HERE "date -t" > remote_time.tmp
答案2
接受的答案是“可接受”,但不安全。最好的方法是将主机密钥指定给 plink,以防止任何中间人攻击。
plink -hostkey aa:bb:cc... root@REMOTE_IP_HERE [...]
答案3
PuTTY
并plink.exe
在安装它们的主机上共享相同的“可接受的服务器密钥”缓存。
如果你的情况是交互的(因此当您按“y”或“n”时不会听到您的沮丧声音),一种解决方法是先尝试与 PuTTY 建立连接。
执行此操作时:
- 你将打开
PuTTY
并假装启动与服务器的交互式 SSH 会话 - 您将看到一个 Windows 对话框,其中显示密钥,询问您是否要信任它
- 您需要检查显示的密钥,以防范 MITM,然后按
OK
- 从今以后,
plink.exe
不会再询问你是否信任服务器——它已经知道你信任它了