将已知密钥/指纹添加到 known_hosts 的良好做法是什么

将已知密钥/指纹添加到 known_hosts 的良好做法是什么

类似这个问题的答案有很多,但我似乎找不到一个有明确答案的。它们要么至少抓取一次公钥,要么完全忽略密钥,要么直接写入 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 [email protected]

答案1

有了公钥,您可以简单地将密钥写入文件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

-G的开关相当ssh新。如果它不起作用,您将必须以不同的方式确定是否对已知主机进行哈希处理(或无论条件如何都这样做)。

对已经哈希化的主机进行哈希处理不会触及这些行。

我没有尝试上述脚本,但您应该能够从中了解要点(并且修复拼写错误,如果有的话)。

相关内容