Linux 中【zhōng】关【guān】于 known_hosts 文件【jiàn】,你所应该知道的

本文重点要介绍的,是上述列【liè】表【biǎo】中的最【zuì】后一个文件【jiàn】,known_hosts,它是客【kè】户端 ssh 配置文件的重【chóng】要组成部分。

AJNAPY Data Background digital illustration

如果你经【jīng】常使用 Linux 系统【tǒng】 ssh 到一个远程服务【wù】器,在【zài】主目【mù】录中【zhōng】一般会【huì】有一【yī】个 .ssh 文件夹,在【zài】这个文件夹中会有若干个文【wén】件,其中包括一个 known_hosts 文【wén】件:

$ ls -l .ssh
total 16
-rwxr-xr-x 1 abhishek abhishek  618 Aug 30 16:52 config
-rw------- 1 abhishek abhishek 1766 Nov 12  2017 id_rsa
-rw-r--r-- 1 abhishek abhishek  398 Nov 12  2017 id_rsa.pub
-rw------- 1 abhishek abhishek    1 Sep 26 15:00 known_hosts

这里,id_rsa 是你 ssh 的私钥,id_rsa.pub 为ssh公钥,config 文件用于创【chuàng】建概要信【xìn】息,以便进行【háng】 ssh 连接。

本文【wén】重点【diǎn】要介绍【shào】的【de】,是上述列表中的最后一个文件,known_hosts,它是客户端【duān】 ssh 配置文件的重要组【zǔ】成部分【fèn】。

SSH中的 known_hosts 文件是什么
known_hosts 文件存储【chǔ】用户访问的主机的公钥。这是一个非常重要的文件,它通过将用户的身【shēn】份保存到本地系统来【lái】确【què】保用户【hù】连【lián】接到合法的服务器。这也【yě】有【yǒu】助于避免中间人攻【gōng】击【jī】。

当你通过SSH连接到一【yī】个新的远【yuǎn】程服务器时,系统【tǒng】会提示你【nǐ】是否要将【jiāng】远【yuǎn】程主【zhǔ】机添加到 known_hosts 文【wén】件:

The authenticity of host '194.195.118.85 (194.195.118.85)' can't be established.
ED25519 key fingerprint is SHA256:wF2qILJg7VbqEE4/zWmyMTSwy3ja7be1jTIg3WzmpeE.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?

选择 yes,服务器的连接信息会保存在你的系统中。

避免中间人攻击


我【wǒ】们【men】假设你经常连接某个服务器,且将该【gāi】服务【wù】器的连接信【xìn】息保存在了 know_hosts 文【wén】件中。

如果远程服【fú】务【wù】器的公钥发生了更改,你的【de】系统会根【gēn】据 known_hosts 文件中【zhōng】存储的信息记录此次更【gèng】改【gǎi】,你也【yě】会收到【dào】此更改的【de】通知:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: POSSIBLE DNS SPOOFING DETECTED!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA host key for xyz remote host has changed,and the key for the corresponding IP address xxx.yy.xxx.yy is unknown. This could either mean that DNS SPOOFING is happening or the IP address for the host and its host key have changed at the same time.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
69:4e:bb:70:6a:64:e3:78:07:6f:b4:00:41:07:d8:9c.
Please contact your system administrator.
Add correct host key in /home/.ssh/known_hosts to get rid of this message.
Offending key in /home/.ssh/known_hosts:1
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.

在【zài】这【zhè】种情况下,你可以在接【jiē】受这个新密钥【yào】之前联系远程【chéng】服务器的管理员,以【yǐ】便确保远程服务器没【méi】有【yǒu】受到入侵。

有时【shí】候,管理员【yuán】可能会由于重新安装服【fú】务器【qì】而故【gù】意更改服务器(主机)的密【mì】钥。

无【wú】论更改【gǎi】的原因是什么,你都需要首先从 known_hosts 文件【jiàn】中删除旧密【mì】钥,以便重新【xīn】连接到远【yuǎn】程服务器。下次连接到此服务【wù】器时,客户端【duān】主机将为此服务器创建【jiàn】新的主机密【mì】钥。

管理多个经过身份验证的用户
如前所述,一旦客户机主机成功连接到远程服务器,其【qí】 known_hosts 文件【jiàn】将附加【jiā】服务【wù】器的【de】公钥。

有时,你可【kě】能会【huì】希望对服务【wù】器进行身份验证【zhèng】,而不需要【yào】提示进行服务器密钥验证。例如【rú】,你【nǐ】正【zhèng】在运行 Ansible 之类的配置管【guǎn】理工具,并且不希望【wàng】客户【hù】端主机请求服务器密钥验证。

因此,如果你有多个用户,可以使用三种方式绕过SSH交互提示:

1)手动将服【fú】务器【qì】的公钥【yào】附加到每个【gè】用【yòng】户的known_hosts文件中;

2)通过 ssh 访问服务器时,对每个【gè】客户端都【dōu】使用命令行【háng】设【shè】置参数 -o StrictHostKeyChecking=no(不推荐);

3)在【zài】主 ssh_known_hosts 文【wén】件中注册所有主机,然后将此文件编【biān】排到所有客户【hù】端主机,然【rán】后使用 ssh-keyscan 命【mìng】令【lìng】:

ssh-keyscan -H -t rsa ‘your-server-ip’ >> /etc/ssh/ssh_known_hosts

下图显示了如何【hé】使用 StrictHostKeyChecking=no 选项【xiàng】:

上述方法中,第一【yī】种【zhǒng】方法相比【bǐ】于另外两种方法【fǎ】,操【cāo】作起来更加【jiā】繁琐。

从 known_hosts 文件获取远程系统详细信息

获取远程系统的详细信息,不是一个简单的工作。

基【jī】于安全考【kǎo】虑,几乎所有【yǒu】 Linux 系统都会【huì】将 ssh 配置文件中的【de】 HashKnownHosts 参数设置为 yes。

这【zhè】也【yě】就意【yì】味着在 known_hosts 文件中的信【xìn】息是以 hash 方【fāng】式存储的,你【nǐ】可能会看到一【yī】些随机数,但这并【bìng】不能提【tí】供任何有用的信息。

$ cat .ssh/known_hosts
|1|yWIW17YIg0wBRXJ8Ktt4mcfBqsk=|cFHOrZ8VEx0vdOjau2XQr/K7B/c= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFR293PJnDCj59XxfqYGctrMo60ZU5IOjACZZNRp9D6f
|1|Ta7hoH/az4O3l2dwfaKh8O2jitI=|WGU5TKhMA+2og1qMKE6kmynFNYo= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCmrxLW436AyBGyGCggl/j2qBCr782AVIvbiTEsWNBWLcWMKYAQpTdAXnaV4bBRqnk2NJg/60XDHKC2DF1tzx6ABWN/R6vcUAbulI9H1RUWpJ1AiDmFL84MvW2UukbpN5a6Lr+DvjclVqPxJRjQKr6Vy2K9oJgGKnHVcWSIHeAlW49kCCg5fIxF8stBTqJg0cRk6uxmcYVud1vh9a7SaZGK+jFZTB75RiHAVFuitHWpljecMxJRNYy/EhmmXrrvyU8pObVXlWlDd61uwExi4uEwNSY+Do7vR1y8svnt9mjTzzyM6MhT4sOcxWmNgdmw7bU/wPpie3dSjZMQeu2mQCSM7SG28dwjSyFPpanRsZKzkh0okAaCSItoNwl6zOf6dE3zt0s5EI6BPolhFAbT3NqmXRblxb7eV8rGEPf14iguHUkg6ZQr2OUdfeN1FYNMJ8Gb9RD159Mwjl4/jPIBdnXvt7zYct3XhPKm7Wxv4K/RWZE837C7mGQh2KEahWajdq8=
|1|NonAy25kVXL24U2mx6ZNxAY5m98=|ypf0IMpf3qq3vhrvUMprssOhODs= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBE3br/9jaZfdB+qBxiVEZBJMb4XQONwzV4tH1xeFZX/zkyws2eBHrVO9O5l9b6M6+gO6nBtCwAzzaeLOn6mo8GQ=

如果【guǒ】你知道系统的主机名【míng】或IP地址,则【zé】可以【yǐ】从 known_hosts 获取【qǔ】相关信息:

ssh-keygen -l -F

但是,如【rú】果【guǒ】你想【xiǎng】要【yào】一个能够以明文形【xíng】式列【liè】出【chū】的所有服务【wù】器及其详细信息的命令,那是不可能的。

当然,现【xiàn】实中会有一些专门的【de】工【gōng】具可以【yǐ】破译 known_hosts,但这【zhè】不是普通用户可以做到【dào】的。

从known_hosts中删除信息
如果想【xiǎng】要【yào】从 known_hosts 文件中删除某个特定【dìng】的【de】主机信【xìn】息,可【kě】以根据远程【chéng】系统的主机名或 IP 执行这个操作:

ssh-keygen -R

当然【rán】也可以【yǐ】先识别相关服务器的信息,然【rán】后使用 rm 命令手动【dòng】删除【chú】,但是【shì】这个操作要麻烦的【de】多,远不如使用上述命令【lìng】方便。

ssh-keygen -R 用 rm 命令手【shǒu】动删除,但是这【zhè】个操作【zuò】要麻烦的多【duō】,远【yuǎn】不如使用上述命令方【fāng】便。

通【tōng】过了解 ssh 相关的配【pèi】置【zhì】文件【jiàn】,有助于【yú】更好的【de】理解系统安【ān】全相关知识。known_hosts 正是系统【tǒng】安全相关的重【chóng】要组成部分。

以上就是本次分享全部内容。

阿里企业邮箱、网易企业邮箱、新网企业邮箱
【标准版】400元/年/5用户/无限容量
【外贸版】500元/年/5用户/无限容量
其它【tā】服务:网站建设、企【qǐ】业邮【yóu】箱、数字证【zhèng】书【shū】ssl、400电话、
联系方式:电话:13714666846 微信同号

声明:本站所有作品(图文、音视【shì】频)均由用【yòng】户自行上传分【fèn】享【xiǎng】,或互联网相关知识整合,仅【jǐn】供网友学习【xí】交流,若您的权利被侵害,请联【lián】系 管理员【yuán】 删除【chú】。

本文【wén】链接:https://www.city96.com/article_32560.html