不创建新密钥的情况下移除SSH密钥的密码短语
不创建新密钥的情况下移除SSH密钥的密码短语
技术背景
在使用SSH密钥进行安全认证时,为了保护密钥的安全性,通常会为其设置密码短语。然而,在某些场景下,如自动化脚本或频繁使用SSH连接时,每次输入密码短语会带来不便。因此,需要在不创建新密钥的情况下移除SSH密钥的密码短语。
实现步骤
交互式方式
使用 ssh-keygen -p
命令,该命令会提示你输入密钥文件位置、旧密码短语和新密码短语(若留空则无密码短语)。具体步骤如下:
- 打开终端(如Git Bash、Mac终端、Windows命令提示符等)。
- 输入
ssh-keygen -p
并回车。 - 对于密钥文件位置,可按回车使用默认位置(通常为
~/.ssh/id_rsa
)。 - 输入旧密码短语。
- 输入新密码短语时,若想移除密码短语,直接按回车留空。
- 再次确认新密码短语,同样按回车留空。
非交互式方式
使用 ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
命令,可在一行中完成操作而无需提示。但要注意,命令执行记录会以明文形式保存在 ~/.bash_history
文件中,包括密码短语,因此除非有特殊需求,建议使用交互式方式。
不同系统的特殊处理
Mac系统
- 可将私钥的密码短语存储在钥匙串中,使使用更加透明。在
~/.ssh/config
文件中添加UseKeychain yes
。 - 若之前设置了密码短语,可使用
ssh-add --apple-use-keychain ~/.ssh/id_rsa
命令将密钥添加到钥匙串,只需最后一次输入密码短语。
Windows系统
- 若遇到 “id_ed25135: No such file or directory” 错误,可在命令中指定完整的密钥文件路径,如
ssh-keygen -p -f C:\Users\john\.ssh\id_ed25135
。 - 也可使用PuttyGen工具加载私钥文件,移除密码短语后覆盖现有私钥文件。
核心代码
1 |
|
最佳实践
- 若需要频繁使用SSH连接,可考虑使用
ssh-agent
缓存密码短语一段时间。可在.bash_profile
(或等效文件)中添加以下代码,在登录时启动ssh-agent
:
1 |
|
- 在Linux发行版(如Ubuntu、Debian)中,可使用
ssh-copy-id -i ~/.ssh/id_dsa.pub username@host
命令将生成的密钥复制到远程机器并添加到远程钥匙串。
常见问题
- 命令执行记录包含密码短语:使用非交互式方式时,命令会以明文形式记录在
~/.bash_history
文件中,建议使用交互式方式避免此问题。 - Windows系统找不到密钥文件:可在命令中指定完整的密钥文件路径,确保路径格式正确。
- 移除密码短语存在安全风险:移除密码短语后,任何拥有密钥文件的人都可以使用该密钥,因此需谨慎操作,可考虑使用
ssh-agent
或钥匙串来平衡安全性和便利性。
不创建新密钥的情况下移除SSH密钥的密码短语
https://119291.xyz/posts/remove-ssh-key-passphrase-without-new-key/