linux ssh公钥移除办法
移除通过 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
文件夹中。
使用一个文本编辑器(如 nano
或 vim
)打开它:
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
就是你生成密钥时所在主机的名称。
- 找到与你本地主机匹配的行。例如,如果你想移除
user@local-machine-A
这台电脑的访问权限,就找到包含这个注释的公钥行。 - 如果你不确定是哪一行,你可以在本地主机上执行以下命令,查看你自己的公钥:
然后将输出的内容与远程主机cat ~/.ssh/id_rsa.pub
authorized_keys
文件中的各行进行比对,找到完全匹配的那一行。
步骤 4: 删除并保存
在 nano
编辑器中:
- 使用键盘的上下箭头,将光标移动到你想要删除的那一行。
- 按下
Ctrl + K
,这会剪切(删除)整行。 - 按下
Ctrl + X
准备退出。 - 编辑器会问你 “Save modified buffer?” (是否保存修改),输入
Y
。 - 最后按
Enter
键确认文件名,即可保存并退出。
现在,对应的公钥已经从远程主机的授权列表中被移除了。
步骤 5: 验证移除是否成功
- 在远程主机的终端中输入
exit
登出。 - 再次尝试从你的本地主机连接到远程主机:
ssh username@remote_host_ip
- 此时,系统应该会提示你输入密码,而不是直接登录。这就证明了基于密钥的认证已经失效,移除操作成功!
重要警告:避免将自己锁在门外
在你删除公钥之前,请务必确认以下事项:
- 不要删除唯一的访问方式:如果你禁用了密码登录(
PasswordAuthentication no
),并且authorized_keys
文件中只有你将要删除的这一个公钥,那么删除它之后,你将无法再通过 SSH 登录这台主机。除非你有物理访问权限或通过云服务商的控制台访问,否则等于把自己锁在了门外。 - 确认你知道密码:在移除公钥前,请确保你知道该用户的登录密码,并且服务器允许密码登录,以作为备用登录方式。
客户端清理(可选但推荐)
在你本地主机上,SSH 客户端会将它连接过的远程主机的“主机密钥指纹”保存在 ~/.ssh/known_hosts
文件中,用于验证服务器身份。
如果你确定以后不再连接该远程主机,或者该远程主机重装了系统(导致其主机密钥改变),你可以从你本地的 known_hosts
文件中移除它的记录。
使用以下命令可以轻松完成,而无需手动编辑文件:
ssh-keygen -R remote_host_ip
这会找到并删除 ~/.ssh/known_hosts
文件中与 remote_host_ip
相关的所有条目。