将已知密钥/指纹添加到known_hosts的最佳做法是什么?

有很多类似这个问题的答案,但我似乎无法find一个明确的答案。 它们要么至less抓取一次公钥,要么完全忽略该密钥,要么直接写入known_hosts文件(意味着没有哈希)

我有服务器的指纹和/或公钥。 我想要一个shell命令将其添加到客户端的known_hosts文件。 这必须使用任何configuration(散列/不散列)

另外,脚本会从这个服务器做一个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 

但是,当我克隆(通过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 [email protected]不会提示我有关指纹。

有一个公钥,你可以简单地将密钥写入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开关是相当新的。 如果它不起作用,你将不得不决定是否以不同的方式散列已知的主机(或者不pipe条件如何)。

散列主机散列文件不会触及这些行。

我没有尝试上面的脚本,但你应该能够从中得到重点(并修复错别字,如果有的话)。