ssh-keygen -p 可安全修改私钥口令而不影响公钥及密钥对数学关系;需用绝对路径指定私钥文件,输入旧口令后回车可清空新口令,并须同步更新ssh agent缓存。

ssh-keygen -p 直接改私钥口令,公钥完全不受影响
能改,而且非常安全——ssh-keygen -p 只操作私钥文件本身,不碰公钥内容,也不改密钥对的数学关系。公钥认证依赖的是私钥能否正确解密服务器发来的挑战,只要私钥文件没被重生成、没被损坏,改完口令后原有 authorized_keys 里的公钥依然有效。
执行 ssh-keygen -p 的正确姿势
关键不是“能不能”,而是“怎么输才不翻车”。常见错误是路径写错、漏参数、或误以为要输新口令两次就完事了。
-
ssh-keygen -p -f ~/.ssh/id_rsa是最简可用命令,-f后必须跟私钥文件的**绝对路径**(不能只写id_rsa) - 运行后先提示
Enter old passphrase:—— 这里必须输对旧口令,否则直接失败,不会让你继续 -
Enter new passphrase (empty for no passphrase):这一行回车即清空口令,不是输两个空格,也不是输none - 如果私钥文件名不是
id_rsa(比如叫mykey),那-f后必须写成~/.ssh/mykey,不能只写mykey
改完口令后必须验证的三个点
很多人改完就去连服务器,结果报 Permission denied (publickey),其实不是口令没生效,而是卡在别的环节。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 用
ssh -i ~/.ssh/id_rsa user@host -v加-v看详细日志,确认是否卡在「decrypting private key」阶段 - 检查目标服务器上
~/.ssh/authorized_keys里的公钥行是否被意外覆盖或换行截断(尤其用echo ... >> authorized_keys时容易多出空行) - 确认 SSH 服务端没禁用密码认证却忘了开公钥认证:查
/etc/ssh/sshd_config中PubkeyAuthentication yes是否启用,改完需sudo systemctl restart sshd
为什么不要用 cp / mv / chmod 操作私钥文件后再跑 -p
私钥文件权限一旦被改成 644 或属主不对,ssh-keygen -p 会拒绝操作并报错 Permissions for 'xxx' are too open。这不是警告,是硬性拦截。
- 改口令前先执行
chmod 600 ~/.ssh/id_rsa,确保权限严格 - 别把私钥复制到临时目录再改——路径一变,
-f就找不到原文件,且容易留副本造成泄露风险 - 如果私钥在 USB 设备或非标准路径,
-f必须指向真实位置,ssh客户端连接时也得用-i显式指定同一路径
真正容易被忽略的,是改完口令后没同步更新本地 SSH agent 缓存——如果你之前用 ssh-add 加载过旧口令的私钥,现在得先 ssh-add -d ~/.ssh/id_rsa 卸载,再 ssh-add ~/.ssh/id_rsa 重新加载,否则 agent 还拿着旧解密结果。










