SSH 总是弹警告?一行 sed 命令教你轻松搞定 known_hosts!
在使用 SSH 连接远程服务器时,可能会遇到“远程主机密钥已更改”的警告,这通常与 ~/.ssh/known_hosts 文件有关。该文件记录了曾经连接过的服务器的公钥指纹,用于验证服务器的身份。当服务器密钥更新或重装系统时,旧指纹与新指纹不匹配,导致 SSH 客户端发出警告。通过 sed -i /^192.168.88.102/d /root/.ssh/known_hosts 命令,可以删除指定
兄弟们,在使用 SSH 连接远程服务器时,你有没有遇到过这样的情况:明明输入的密码和用户名都对,却突然弹出一个警告,告诉你“远程主机密钥已更改”?又或者,在一些自动化脚本中,你希望每次连接都像初次见面一样,能手动确认一次?
今天,我们就来揭开一个 SSH 背后的小秘密——~/.ssh/known_hosts 文件,以及如何通过一个精妙的 sed 命令,来玩转这个“管家”!
🏡 known_hosts:你的 SSH 连接“小本本”
首先,我们来认识一下 ~/.ssh/known_hosts 这个文件(在 Linux 系统中,~ 代表你的用户主目录,root 用户就是 /root/.ssh/known_hosts)。
它就像你的 SSH 客户端的一本“通讯录”,里面记录了你曾经连接过的远程服务器的“数字指纹”(也就是它们的公钥)。
- 第一次连接时:当你第一次 SSH 连接到一个新服务器时,系统会提示你是否接受这个服务器的公钥指纹。如果你选择接受,这个公钥就会被记录在
known_hosts文件中。 - 再次连接时:之后当你再次连接同一个服务器时,SSH 客户端会检查
known_hosts文件。如果记录的指纹与服务器当前的指纹一致,它就会信任这个连接并直接进行认证;如果不一致,它就会发出警告,提醒你可能存在中间人攻击,或者服务器的密钥确实更新了。
🕵️♀️ sed -i /^192.168.88.102/d /root/.ssh/known_hosts:魔法分解!
现在,我们来看这条看起来有点“高深”的命令:
sed -i /^192.168.88.102/d /root/.ssh/known_hosts
别慌,我们把它拆解开来,一步步理解:
-
sed:它是 Linux 系统中一个非常强大的流编辑器,可以用来对文本进行各种操作,比如查找、替换、删除等。 -
-i:这是一个非常重要的参数!它告诉sed,你不是要把修改结果打印到屏幕上,而是要直接修改原始文件(in-place editing)。所以,执行完这条命令,/root/.ssh/known_hosts这个文件本身就会被修改。 -
^192.168.88.102/d:这是sed的核心指令,它由两部分组成:^192.168.88.102:这是一个正则表达式。^符号表示“行的开头”。192.168.88.102是一个具体的 IP 地址。- 合起来的意思就是:查找所有以
192.168.88.102开头的行。在known_hosts文件中,每条记录通常都是以主机名或 IP 地址开头的。
/d:这个字母d是sed的删除命令(delete)。- 它的作用是:删除所有匹配到前面正则表达式的行。
-
/root/.ssh/known_hosts:这个就是我们要操作的目标文件路径啦!
所以,这条命令的完整含义就是:
“在 /root/.ssh/known_hosts 这个文件中,找到所有以 192.168.88.102 开头的行,然后把它们直接删除掉!”
💡 为什么需要这样做?
那么,为什么要特意删除 known_hosts 中的记录呢?主要有以下几个场景:
-
服务器密钥更新:如果你的远程服务器(比如 IP 为
192.168.88.102的那台)重装了系统,或者 SSH 服务重新生成了密钥,那么它新的“指纹”就和known_hosts中记录的旧指纹不一致了。SSH 客户端为了安全,就会阻止你连接,并提示“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!”。- 此时,删除旧记录,下次连接时 SSH 客户端就会再次提示你确认新密钥,更新
known_hosts文件。
- 此时,删除旧记录,下次连接时 SSH 客户端就会再次提示你确认新密钥,更新
-
自动化测试或部署:在一些自动化脚本或测试环境中,你可能希望每次连接某个固定的 IP 地址时,都能模拟首次连接的体验,或者确保密钥是最新的,而无需手动干预。通过脚本自动删除旧记录,可以强制 SSH 客户端重新验证。
总结
~/.ssh/known_hosts 文件是 SSH 安全机制的重要一环。而 sed -i /^IP地址/d ~/.ssh/known_hosts 这样的命令,则是一个方便我们管理和更新这个“通讯录”的小技巧。了解它的工作原理,能帮助我们更好地排查 SSH 连接问题,也能在自动化脚本中更灵活地处理连接验证!
你学到了吗?快去检查一下你的 known_hosts 文件里,有没有什么需要清理的“旧朋友”吧!👇
更多推荐


所有评论(0)