共计 1669 个字符,预计需要花费 5 分钟才能阅读完成。
导读 | 首次连接到 Linux 系统时,SSH 会提示你接受计算机的指纹以成功建立连接,因为“known_hosts”文件中没有指纹。 |
指纹是系统公钥的缩写版本,为了保护自己免受中间人攻击(MITM),ssh 程序使用自上次连接以来存储的指纹验证远程系统 ssh 的指纹。如果指纹已更改,系统将提醒你并询问是否要继续。
有时你可能需要自动接受 SSH 指纹。例如,如果创建了一个 shell 脚本用来远程管理多台 linux 服务器。
可以使用以下两种方法来完成此操作。
- 使用
StrictHostKeyChecking=no
选项自动接受 ssh 指纹。 - 使用
ssk-keyscan
命令接受 ssh 指纹。
首次连接到远程计算机时,将警告你无法建立主机的真实性,并提供密钥指纹以进行验证。
接受指纹后,它将被保存在“known_hosts”文件中,当重新连接到同一个远程主机时,SSH 根据 known_hosts 文件检查指纹,以验证其身份。
此方法简单明了,只需使用 SSH 命令添加选项即可实现。使用此选项时,ssh 会自动将新的主机密钥添加到用户 known_hosts 文件中。
[root@localhost ~]# ssh -o "StrictHostKeyChecking no" localhost
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
root@localhost's password:
Last login: Mon Jan 25 20:01:53 2021 from 192.168.43.1
以上警告表明它已将一个密钥添加到 known_host 文件。
这是另一种方法,ssh-keycan
允许你将 ssh 指纹附加到 known_hosts 文件中。当你想要批量添加时,此工具非常有用。使用下面命令操作:
[root@localhost ~]# ssh-keyscan -H 192.168.43.138 >> ~/.ssh/known_hosts
# 192.168.43.138:22 SSH-2.0-OpenSSH_7.4
# 192.168.43.138:22 SSH-2.0-OpenSSH_7.4
# 192.168.43.138:22 SSH-2.0-OpenSSH_7.4
使用以下命令将多台远程主机的 ssh 指纹添加到 known_hosts。必须将远程主机的 IP 地址添加到一个文件中,并使用 ssh-keyscan 命令调用它,如下所示,将各个远程服务器的 ip 地址保存在文本文件里面:
[root@localhost ~]# cat remote-hosts.txt
192.168.43.137
192.168.43.138
192.168.43.166
然后使用 ssh-keyscan
工具将它们的 ssh 指纹添加到 known_hosts:
[root@localhost ~]# ssh-keyscan -f ./remote-hosts.txt >> ~/.ssh/known_hosts
# 192.168.43.138:22 SSH-2.0-OpenSSH_7.4
# 192.168.43.137:22 SSH-2.0-OpenSSH_7.8
# 192.168.43.137:22 SSH-2.0-OpenSSH_7.8
# 192.168.43.137:22 SSH-2.0-OpenSSH_7.8
# 192.168.43.138:22 SSH-2.0-OpenSSH_7.4
# 192.168.43.138:22 SSH-2.0-OpenSSH_7.4
# 192.168.43.166:22 SSH-2.0-OpenSSH_7.4
# 192.168.43.166:22 SSH-2.0-OpenSSH_7.4
# 192.168.43.166:22 SSH-2.0-OpenSSH_7.4
首次连接到 Linux 系统时,SSH 会提示你接受计算机的指纹以成功建立连接,因为“known_hosts”文件中没有指纹。