![ssh 命令行指定服务器主机密钥指纹](https://linux22.com/image/654810/ssh%20%E5%91%BD%E4%BB%A4%E8%A1%8C%E6%8C%87%E5%AE%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%BB%E6%9C%BA%E5%AF%86%E9%92%A5%E6%8C%87%E7%BA%B9.png)
使用ssh
命令行(OpenSSH),我可以指定服务器的主机密钥指纹吗?
这可以通过 winscp.com 实现(例如)-hostkey="ssh-rsa 2048 AA:BB:CC...etc
我已经阅读了手册页几次,如果我错过了其中明显的内容,我深感抱歉。
我不想自动接受主机密钥,也不想要求用户更新他们的密钥known_hosts
,而是在命令行上以某种形式指定主机密钥。
答案1
OpenSSH 中没有命令行选项来传递主机密钥指纹。
虽然您可以使用临时文件(与 格式相同known_hosts
)并ssh
使用-o UserKnownHostsFile
:
ssh -o "UserKnownHostsFile my_temp_known_host" host.example.com
查看ssh
(对于-o
)和ssh_config
(对于UserKnownHostsFile
)手册页。
您也可以考虑使用StrictHostKeyChecking yes
。
正如建议的那样从命令行自动接受 rsa 密钥指纹,你可以编写一个小脚本来实现这一点:
#!/bin/bash
TEMPFILE=$(mktemp)
echo "$1" > $TEMPFILE
ssh -o "UserKnownHostsFile $TEMPFILE" ${@:2}
rm $TEMPFILE
如果您调用脚本ssh_known_host
,则可以使用它,并将密钥作为第一个参数传递:
ssh_known_host 'github.com ssh-dss AAAAB3NzaC1kc3MAAACBANGFW2P9xlGU3zWrymJgI/lKo//ZW2WfVtmbsUZJ5uyKArtlQOT2+WRhcg4979aFxgKdcsqAYW3/LS1T2km3jYW/vr4Uzn+dXWODVk5VlUiZ1HFOHf6s6ITcZvjvdbp6ZbpM+DuJT7Bw+h5Fx8Qt8I16oCZYmAPJRtu46o9C2zk1AAAAFQC4gdFGcSbp5Gr0Wd5Ay/jtcldMewAAAIATTgn4sY4Nem/FQE+XJlyUQptPWMem5fwOcWtSXiTKaaN0lkk2p2snz+EJvAGXGq9dTSWHyLJSM2W6ZdQDqWJ1k+cL8CARAqL+UMwF84CR0m3hj+wtVGD/J4G5kW2DBAf4/bqzP4469lT+dF2FRQ2L9JKXrCWcnhMtJUvua8dvnwAAAIB6C4nQfAA7x8oLta6tT+oCk2WQcydNsyugE8vLrHlogoWEicla6cWPk7oXSspbzUcfkjN3Qa6e74PhRkc7JdSdAlFzU3m7LMkXo1MHgkqNX8glxWNVqBSc0YRdbFdTkL0C6gtpklilhvuHQCdbgB3LBAikcRkDp+FCVkUgPC/7Rw==' [email protected]
顺便说一句,不要尝试使用<()
带有的 shell 构造UserKnownHostsFile
,如下所示:
-o UserKnownHostsFile=<(echo "hostname ssh-rsa ...")
不行,可能是因为 创建的 fd<()
只能读取一次,而 whilessh
会重复读取文件。