linux – 将已知密钥/指纹添加到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 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开关相当新.如果它不起作用,则必须确定是否以不同方式散列已知主机(或者无论条件如何都这样做).

使用已散列的主机散列文件不会触及这些行.

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

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...