首页 > 系统相关 >Linux中的known_hosts

Linux中的known_hosts

时间:2023-08-17 13:31:45浏览次数:33  
标签:文件 hosts ssh key Linux known 服务器

如果你经常使用 Linux 系统 ssh 到一个远程服务器,在主目录中一般会有一个 .ssh 文件夹,在这个文件夹中会有若干个文件,其中包括一个 known_hosts 文件:

$ 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 文件用于创建概要信息,以便进行 ssh 连接。

本文重点要介绍的,是上述列表中的最后一个文件,known_hosts,它是客户端 ssh 配置文件的重要组成部分。

SSH中的 known_hosts 文件是什么

known_hosts 文件存储用户访问的主机的公钥。这是一个非常重要的文件,它通过将用户的身份保存到本地系统来确保用户连接到合法的服务器。这也有助于避免中间人攻击。

当你通过SSH连接到一个新的远程服务器时,系统会提示你是否要将远程主机添加到 known_hosts 文件:

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,服务器的连接信息会保存在你的系统中。

避免中间人攻击

Linux中的known_hosts_known_hosts

我们假设你经常连接某个服务器,且将该服务器的连接信息保存在了 know_hosts 文件中。

如果远程服务器的公钥发生了更改,你的系统会根据 known_hosts 文件中存储的信息记录此次更改,你也会收到此更改的通知:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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.


在这种情况下,你可以在接受这个新密钥之前联系远程服务器的管理员,以便确保远程服务器没有受到入侵。

有时候,管理员可能会由于重新安装服务器而故意更改服务器(主机)的密钥。

无论更改的原因是什么,你都需要首先从 known_hosts 文件中删除旧密钥,以便重新连接到远程服务器。下次连接到此服务器时,客户端主机将为此服务器创建新的主机密钥。

管理多个经过身份验证的用户

如前所述,一旦客户机主机成功连接到远程服务器,其 known_hosts 文件将附加服务器的公钥。

有时,你可能会希望对服务器进行身份验证,而不需要提示进行服务器密钥验证。例如,你正在运行 Ansible 之类的配置管理工具,并且不希望客户端主机请求服务器密钥验证。

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

1)手动将服务器的公钥附加到每个用户的known_hosts文件中;

2)通过 ssh 访问服务器时,对每个客户端都使用命令行设置参数 -o StrictHostKeyChecking=no(不推荐);

3)在主 ssh_known_hosts 文件中注册所有主机,然后将此文件编排到所有客户端主机,然后使用 ssh-keyscan 命令:

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


下图显示了如何使用 StrictHostKeyChecking=no 选项:

Linux中的known_hosts_known_hosts_02

上述方法中,第一种方法相比于另外两种方法,操作起来更加繁琐。

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

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

基于安全考虑,几乎所有 Linux 系统都会将 ssh 配置文件中的 HashKnownHosts 参数设置为 yes。

这也就意味着在 known_hosts 文件中的信息是以 hash 方式存储的,你可能会看到一些随机数,但这并不能提供任何有用的信息。

$ 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=


如果你知道系统的主机名或IP地址,则可以从 known_hosts 获取相关信息:

ssh-keygen -l -F <server-IP-or-hostname>

但是,如果你想要一个能够以明文形式列出的所有服务器及其详细信息的命令,那是不可能的。

当然,现实中会有一些专门的工具可以破译 known_hosts,但这不是普通用户可以做到的。

从known_hosts中删除信息

如果想要从 known_hosts 文件中删除某个特定的主机信息,可以根据远程系统的主机名或 IP 执行这个操作:

ssh-keygen -R <server-hostname-or-ip>

当然也可以先识别相关服务器的信息,然后使用 rm 命令手动删除,但是这个操作要麻烦的多,远不如使用上述命令方便。

通过了解 ssh 相关的配置文件,有助于更好的理解系统安全相关知识。known_hosts 正是系统安全相关的重要组成部分。

以上就是本次分享全部内容,欢迎讨论。

标签:文件,hosts,ssh,key,Linux,known,服务器
From: https://blog.51cto.com/jowin/7121709

相关文章

  • Linux常用网络配置
    1、nmcli命令中的device和connection分别代表什么含义?device:网络接口,是物理设备connection:是连接,偏重于逻辑设置2、如何查看Linux主机的IP参数?ifconfig、ipaddr、iplink3、如何修改Linux主机的计算机名字(主机名)?hostname查看和临时设置hostnamectl永久设置修......
  • 聊一下操作系统 macOS 与 Linux
    对于Windows操作系统大家都比较熟悉,也常拿它与Linux操作系统进行比较,两者之间的差异也很明显。但对于macOS和Linux的比较不太多,很多人认为它们很相似,因为这两种操作系统都可以运行Unix命令。其实详细比较下,两者还是有很多不同点的,每种操作系统都是独一无二的存在,下面就让我们来......
  • centos7安装mariadb-10.10.6-linux-systemd-x86_64.tar.gz
    [root@kht100data]#mysql_install_db--user=root--basedir=/usr/local/mariadb--datadir=/usr/local/mariadb/dataInstallingMariaDB/MySQLsystemtablesin'/usr/local/mariadb/data'...2023-08-1711:07:360[Note]StartingMariaDB10.10.6-MariaDB......
  • linux系统句柄限制调整,当使用netty/socket触发达到系统最大连接数时查看
    socket原理:客户端使用tcp端口连接至服务端,服务端会打开一个句柄文件和客户端保持连接,注意并不是一个连接就会占用一个服务器端口,所以socket连接数跟系统端口最大连接数无关,不然系统防火墙不就没啥用,默认系统每个进程打开的句柄是有限制的,另外整个系统还有一个句柄限制总数,所以soc......
  • Linux常用命令整理
    常见的命令及其参数当谈到Linux的常见命令时,以下是一些常见的Linux命令及其用法,包括选项和参数:ls(列出文件和目录)选项:-l:以长格式显示文件和目录的详细信息-a:显示所有文件和目录,包括隐藏文件-h:以人类可读的格式显示文件大小-r:以相反的顺序显示文件和目录参数:目标目录或文件cd(切换目......
  • Linux开机启动
    在Linux系统中,您可以通过以下几种方法之一来实现开机启动程序。请注意,不同的Linux发行版可能会有不同的方法,下面是一些常用的方法:使用rc.local(适用于SysVinit系统):在一些较旧的Linux发行版中,可以使用rc.local脚本来添加开机启动项。打开/etc/rc.local文件,可以......
  • Linux内核开发分析补充
    总目录一.内核入门篇1.1module_init的优先级---分析1.2linuxkernel大内核锁BKL......
  • Linux多块磁盘合并挂载
    多块磁盘分区信息           1.安装lvm2命令      rpm-Uvh--force--nodeps*.rpm       磁盘分区    给磁盘写入分区表         parted/dev/sdd    mklabelgpt    mkpart    ......
  • Linux下cp -rf总是提示覆盖的解决办法
    通常情况下使用cp-rf进行文件或者文件夹的管理时一般就不再提醒是否覆盖。然而在内网的一台机器上使用cp-rf却提示是否覆盖。难道和常用的命令不同?[root@xxxxtest]#cp-rf./files/./bak/cp:是否覆盖"./bak/files/test.txt"?cp:是否覆盖"./bak/files/hh.txt"?cp:是否覆盖".......
  • Linux下zip安装使用方法
    Linux下zip安装使用方法具体步骤如下:1、查看#yumlist|grepzip/unzip2、安装zip#yuminstallzip3、安装unzip#yuminstallunzip上述过程执行完成后,就可以使用zip命令了。注意:如果在编译的时候出现错误:gcc:errortryingtoexec'cc1plus':execvp:......