当前位置: 首页 > 科技观察

Linux中known_hosts文件你应该知道的

时间:2023-03-12 00:58:39 科技观察

如果你经常使用Linux系统ssh到远程服务器,通常在主目录下会有一个.ssh文件夹,这个文件夹下会有几个文件,这包括一个known_hosts文件:$ls-l.sshtotal16-rwxr-xr-x1abhishekabhishek618Aug3016:52config-rw------1abhishekabhishek1766Nov122017id_rsa-rw-r--r--1abhishekabhishek398Nov122017id_rsa.pub-rw-------1abhishekabhishek1Sep2615:00known_hosts在这里,id_rsa是你的ssh私钥,id_rsa.pub是ssh公钥,配置文件用于创建ssh连接的配置文件。本文主要关注上面列表中的最后一个文件known_hosts,它是客户端ssh配置文件的重要组成部分。SSH中的known_hosts文件是什么known_hosts文件存放的是用户访问的主机的公钥。这是一个非常重要的文件,它通过将用户身份保存到本地系统来确保用户连接到合法服务器。这也有助于避免中间人攻击。当你通过SSH连接到新的远程服务器时,会提示你是否要将远程主机添加到known_hosts文件中:Theauthenticationofhost'194.195.118.85(194.195.118.85)'can'tbeestablished.ED25519key指纹是SHA256:wF2qILJg7VbqEE4/zWmyMTSwy3ja7be1jTIg3WzmpeE。此密钥没有任何其他名称。您确定要继续连接(是/否/[指纹])吗?选择是,服务器连接信息将保存在您的系统中。避免中间人攻击假设您经常连接到一个服务器,并将该服务器的连接信息保存在know_hosts文件中。如果远程服务器的公钥发生变化,你的系统会根据known_hosts文件中存储的信息记录变化,同时也会通知你变化:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@警告:检测到可能的DNS欺骗!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@xyz远程主机的RSA主机密钥已更改,相应IP地址的密钥xxx.yy.xxx.yy未知。这可能意味着DNS欺骗正在发生,或者主机的IP地址及其主机密钥已同时更改。@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@警告:远程主机标识已更改!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@这可能是有人在做一些令人讨厌的事情!现在可能有人正在窃听您(中间??人攻击)!也有可能RSA主机密钥刚刚被更改。远程主机发送的RSA密钥指纹为69:4e:bb:70:6a:64:e3:78:07:6f:b4:00:41:07:d8:9c,请联系系统管理员添加/home/.ssh/kno中的正确主机密钥wn_hosts来摆脱这个消息。/home/.ssh/known_hosts:1中的违规密钥已禁用,以避免中间人攻击。在这种情况下,您可以在事先联系远程服务器的管理员处接受这个新密钥,以确保远程服务器没有受到损害。有时管理员可能会由于重新安装服务器而故意更改服务器(主机)的密钥。无论更改的原因是什么,您都需要先从known_hosts文件中删除旧密钥,以便重新连接到远程服务器。下次连接到该服务器时,客户端主机将为该服务器创建一个新的主机密钥。管理多个经过身份验证的用户如前所述,一旦客户端主机成功连接到远程服务器,其known_hosts文件将附加服务器的公钥。有时,您可能希望在不提示服务器密钥验证的情况下向服务器进行身份验证。例如,您正在运行类似Ansible的配置管理工具,并且不希望客户端主机请求服务器密钥验证。因此,如果你有多个用户,你可以通过三种方式绕过SSH交互提示:1)手动将服务器的公钥追加到每个用户的known_hosts文件中;2)通过ssh访问服务器时,为每个客户端两端使用命令行设置参数-oStrictHostKeyChecking=no(不推荐);3)在主ssh_known_hosts文件中注册所有主机,然后将这个文件安排到所有客户端主机,然后使用ssh-keyscan命令:ssh-keyscan-H-trsa'your-server-ip'>>/etc/ssh/ssh_known_hostsStrictHostKeyChecking=no选项的使用方法如下图所示:上述方法中,第一种方法比其他两种方法操作起来要麻烦一些。从known_hosts文件获取远程系统详细信息获取远程系统详细信息并非易事。基于安全的考虑,几乎所有的Linux系统都会将ssh配置文件中的HashKnownHosts参数设置为yes。这意味着known_hosts文件中的信息存储为哈希,您可能会看到一些随机数,但这并不能提供任何有用的信息。$cat.ssh/known_hosts|1|yWIW17YIg0wBRXJ8Ktt4mcfBqsk=|cFHOrZ8VEx0vdOjau2XQr/K7B/c=ssh-ed25519AAAAC3NzaC1lZDI1NTE5AAAAIFR293PJnDCj59XxfqYGctrMo60ZU5IOjACZZNRp9D6f??|1|Ta7hoH/az4O3l2dwfaKh8O2jitI=|WGU5TKhMA+2og1qMKE6kmynFNYo=ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABgQCmrxLW436AyBGyGCggl/j2qBCr782AVIvbiTEsWNBWLcWMKYAQpTdAXnaV4bBRqnk2NJg/60XDHKC2DF1tzx6ABWN/R6vcUAbulI9H1RUWpJ1AiDmFL84MvW2UukbpN5a6Lr+DvjclVqPxJRjQKr6Vy2K9oJgGKnHVcWSIHeAlW49kCCg5fIxF8stBTqJg0cRk6uxmcYVud1vh9a7SaZGK+jFZTB75RiHAVFuitHWpljecMxJRNYy/EhmmXrrvyU8pObVXlWlDd61uwExi4uEwNSY+Do7vR1y8svnt9mjTzzyM6MhT4sOcxWmNgdmw7bU/wPpie3dSjZMQeu2mQCSM7SG28dwjSyFPpanRsZKzkh0okAaCSItoNwl6zOf6dE3zt0s5EI6BPolhFAbT3NqmXRblxb7eV8rGEPf14iguHUkg6ZQr2OUdfeN1FYNMJ8Gb9RD159Mwjl4/jPIBdnXvt7zYct3XhPKm7Wxv4K/RWZE837C7mGQh2KEahWajdq8=|1|NonAy25kVXL24U2mx6ZNxAY5m98=|ypf0IMpf3qq3vhrvUMprssOhODs=ecdsa-sha2-nistp256AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBE3br/9jaZfdB+qBxiVEZBJMb4XQONwzV4tH1xeFZX/zkyws2eBHrVO9O5l9b6M6+gO6nBtCwAzzaeLOn6mo8GQ=如果您知道系统的主机名或IP地址,您可以从known_hosts获取:ssh-keygen-l-F但是,如果您想要列出所有服务器及其细节,那是不可能的。当然,现实中会有一些专门的工具可以破译known_hosts,但这不是普通用户可以做到的。从known_hosts中删除信息如果想从known_hosts文件中删除特定的主机信息,可以根据远程系统的主机名或IP执行这个操作:ssh-keygen-R当然也可以先识别出相关的服务器信息,然后使用rm命令手动删除,但是这种操作就麻烦多了,远不如使用上面的命令方便。ssh-keygen-R用rm命令手动删除,但是这个操作麻烦多了,远不如用上面的命令方便。通过了解ssh相关配置文件,有助于更好地了解系统安全相关知识。known_hosts是系统安全的重要组成部分。以上就是本次分享的全部内容。