有很多类似于这个问题的答案,但我似乎找不到一个有明确答案的问题.它们都至少抓取一次公钥,完全忽略密钥,或直接写入known_hosts文件(暗示没有哈希)
我有服务器的指纹和/或公钥.我想要一个shell命令将它添加到客户端的known_hosts文件中.这必须使用任何配置(散列/无哈希)
此外,该脚本将从此服务器执行git pull,因此我不知道此时提供端口信息是否相关.请告诉我它是不是.
谢谢.如果已经回答了这个问题并且我以某种方式错过了它,请随时指出我正确的方向.
PS – 额外信息:我询问端口的原因之一是因为我做了以下事情没有成功(我知道这是从主机获取密钥,我宁愿不这样做):
ssh-keygen -R my.awesome.host # hostname ssh-keygen -R 1.2.3.4 # IP ssh-keygen -R my.awesome.host,1.2.3.4 ssh-keyscan -H my.awesome.host,1.2.3.4 >> ~/.ssh/known_hosts ssh-keyscan -H 1.2.3.4 >> ~/.ssh/known_hosts ssh-keyscan -H my.awesome.host >> ~/.ssh/known_hosts
但是当我git clone(通过ssh)时,我遇到了一个响亮的声音:
The authenticity of host '[my.awesome.host]:7999 ([1.2.3.4]:7999)' can't be established. RSA key fingerprint is fi:ger:pr:in:ti:nf:or:ma:ti:on Are you sure you want to continue connecting (yes/no)?
然而,ssh user@my.awesome.host没有提示我指纹.
解决方法
拥有公钥,您只需将密钥写入known_hosts文件并可能重新哈希,如果您需要:
HOSTNAME=my.awesome.host PORT=7999 PUBKEY="ssh-rsa AAAAB3NzaC1yc2EAAAAD...E" KNOWN_HOSTS="~/.ssh/known_hosts" echo "[$HOSTNAME]:$PORT $PUBKEY" >> $KNOWN_HOSTS # re-hash,if needed: ssh -G -p $PORT $HOSTNAME | grep "hashknownhosts yes" && \ ssh-keygen -H -f $KNOWN_HOSTS
ssh的-G开关相当新.如果它不起作用,则必须确定是否以不同方式散列已知主机(或者无论条件如何都这样做).
使用已散列的主机散列文件不会触及这些行.
我没有尝试上面的脚本,但你应该能够从中得到重点(并修复拼写错误,如果有的话).