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