将服务器名称的 ssh 主机密钥幂等地添加到“known_hosts”吗?

将服务器名称的 ssh 主机密钥幂等地添加到“known_hosts”吗?

ssh-keygen -R $HOSTNAME可以从某人的 中删除 ssh 主机密钥。我可以以幂等方式known_hosts将特定主机密钥(针对主机名/ip)添加到 吗?known_hosts

我想编写脚本,让 ssh 进入服务器。这个脚本可能由之前没有 ssh 进入该服务器的人执行,因此服务器的主机密钥不会在文件中known_hosts,所以会要求他们接受它。我想删除这个步骤,让一切变得精简。我该怎么做?

ssh -o StrictHostKeyChecking=no …禁用该安全功能,这有缺点。ssh-keyscan $HOSTNAME > ~/.ssh/known_hosts可以工作,但known_hosts文件会不断增长,并将使用当前的主机密钥。有没有办法做到这一点幂等地,用于固定、定义的服务器名称和主机密钥组合?即“如果您没有 $HOSTNAME 的 $HOST_KEY,请将其添加到您的known_hosts”?

该脚本将在带有 OpenSSH 客户端 v7.6 的 Ubuntu 18.04 上运行

答案1

您可以使用它ssh-keygen来检查known_hosts文件是否包含特定主机的条目,如下所示:

lacek@Teloth:~$ ssh-keygen -f ~/.ssh/known_hosts -F 192.168.153.254
# Host 192.168.153.254 found: line 18 
192.168.153.254 ssh-rsa AAAAB3Nza.....

您可以使用它来检查主机密钥是否存在,如果未找到则添加它,如下所示:

#!/bin/bash

HOSTNAME=host.to.ssh.into
KNOWNHOSTS=~/.ssh/known_hosts

ssh-keygen -F $HOSTNAME -f $KNOWNHOSTS | grep -q found || ssh-keyscan $HOSTNAME >>$KNOWNHOSTS 2>/dev/null

相关内容