linux ssh公钥移除办法

发布于:2025-08-03 ⋅ 阅读:(11) ⋅ 点赞:(0)

移除通过 ssh-copy-id 添加的公钥,其操作逻辑正好是 ssh-copy-id 的逆过程。

ssh-copy-id 的作用是将你的本地公钥(例如 ~/.ssh/id_rsa.pub 的内容)追加到远程主机的 ~/.ssh/authorized_keys 文件中。

因此,要移除这个公钥,你需要在远程主机上编辑那个 authorized_keys 文件,并删除对应的公钥行。


详细步骤:如何从远程主机移除公钥

假设:

  • 本地主机 (Client):你发起控制的电脑。
  • 远程主机 (Server):被你控制的电脑,你想从这里移除本地主机的公钥。IP为 remote_host_ip,用户名为 username
步骤 1: 登录到远程主机

你首先需要登录到那台你想要移除公钥的远程主机。

ssh username@remote_host_ip

注意:此时你仍然可以使用之前设置好的密钥免密登录。如果你是从另一台没有授权的电脑登录,则需要输入密码(前提是远程主机的 SSH 服务没有禁用密码登录)。

步骤 2: 定位并编辑 authorized_keys 文件

登录成功后,你现在操作的是远程主机的终端。authorized_keys 文件位于用户主目录下的 .ssh 文件夹中。

使用一个文本编辑器(如 nanovim)打开它:

nano ~/.ssh/authorized_keys
步骤 3: 识别并删除正确的公钥

打开文件后,你会看到一个或多个很长的字符串,每个字符串占一行。每一行就是一个授权的公钥。
它的格式通常是:[key-type] [base64-encoded-key] [comment]

示例 authorized_keys 文件内容可能如下:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC... user@local-machine-A
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD... another-user@some-other-laptop

如何识别你要删除的那个?

关键在于每行末尾的注释(comment)。当你使用 ssh-keygen 生成密钥时,它会自动在公钥末尾添加一个 username@hostname 格式的注释,这个 hostname 就是你生成密钥时所在主机的名称。

  1. 找到与你本地主机匹配的行。例如,如果你想移除 user@local-machine-A 这台电脑的访问权限,就找到包含这个注释的公钥行。
  2. 如果你不确定是哪一行,你可以在本地主机上执行以下命令,查看你自己的公钥:
    cat ~/.ssh/id_rsa.pub
    
    然后将输出的内容与远程主机 authorized_keys 文件中的各行进行比对,找到完全匹配的那一行。
步骤 4: 删除并保存

nano 编辑器中:

  1. 使用键盘的上下箭头,将光标移动到你想要删除的那一行。
  2. 按下 Ctrl + K,这会剪切(删除)整行。
  3. 按下 Ctrl + X 准备退出。
  4. 编辑器会问你 “Save modified buffer?” (是否保存修改),输入 Y
  5. 最后按 Enter 键确认文件名,即可保存并退出。

现在,对应的公钥已经从远程主机的授权列表中被移除了。

步骤 5: 验证移除是否成功
  1. 在远程主机的终端中输入 exit 登出。
  2. 再次尝试从你的本地主机连接到远程主机:
    ssh username@remote_host_ip
    
  3. 此时,系统应该会提示你输入密码,而不是直接登录。这就证明了基于密钥的认证已经失效,移除操作成功!

重要警告:避免将自己锁在门外

在你删除公钥之前,请务必确认以下事项:

  • 不要删除唯一的访问方式:如果你禁用了密码登录(PasswordAuthentication no),并且 authorized_keys 文件中只有你将要删除的这一个公钥,那么删除它之后,你将无法再通过 SSH 登录这台主机。除非你有物理访问权限或通过云服务商的控制台访问,否则等于把自己锁在了门外。
  • 确认你知道密码:在移除公钥前,请确保你知道该用户的登录密码,并且服务器允许密码登录,以作为备用登录方式。

客户端清理(可选但推荐)

在你本地主机上,SSH 客户端会将它连接过的远程主机的“主机密钥指纹”保存在 ~/.ssh/known_hosts 文件中,用于验证服务器身份。

如果你确定以后不再连接该远程主机,或者该远程主机重装了系统(导致其主机密钥改变),你可以从你本地的 known_hosts 文件中移除它的记录。

使用以下命令可以轻松完成,而无需手动编辑文件:

ssh-keygen -R remote_host_ip

这会找到并删除 ~/.ssh/known_hosts 文件中与 remote_host_ip 相关的所有条目。


网站公告

今日签到

点亮在社区的每一天
去签到