为什么建议改用密钥
密码可以被暴力破解、被日志记录、被复用;密钥是一对数学上匹配的文件,私钥不出本机,服务器只保存公钥,泄露风险低得多。
对经常连多台服务器的人来说,密钥登录还省掉了每次输密码的动作,配合 ssh-agent 可以做到全程无感。
在本机生成密钥对
推荐 ed25519:比 RSA 更短、更快,也更安全。生成的私钥默认在 ~/.ssh/ 下,公钥是同名的 .pub 文件。
ssh-keygen -t ed25519 -C "you@example.com"回车三次即可。如果设置 passphrase,私钥即使被拷走也无法直接使用,安全性更高。
把公钥放到服务器
最简单的方式是 ssh-copy-id,它会自动处理目录和权限。
如果本机没有这个命令(例如部分 Windows 环境),把公钥内容追加到服务器的 ~/.ssh/authorized_keys 里也一样。
- 确认公钥已写入:cat ~/.ssh/authorized_keys
- 确认权限正确:chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
- 保持当前密码登录的会话不要关,另开一个窗口测试密钥登录。
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your-server在 TermX 中导入私钥
- 新建会话或编辑已有会话,认证方式选「密钥」。
- 选择私钥文件(~/.ssh/id_ed25519,注意不是 .pub),如果设置了 passphrase 一并填写。
- 保存后连接;成功一次之后,这把密钥会被记住,后续只需选择。
私钥只保存在本机,TermX 不会把它上传到云端;云端仓库同步的是加密后的连接信息。
常见报错与原因
Permission denied (publickey) 是最常见的报错,九成是权限或文件位置问题,而不是密钥本身错了。
- 服务器家目录权限过大:chmod 755 ~,.ssh 必须是 700。
- authorized_keys 权限过大:chmod 600。
- 公钥没换行就直接追加了内容:确保每条公钥独占一行。
- SELinux 或云镜像的 sshd 配置禁用了公钥登录:检查 /etc/ssh/sshd_config 里的 PubkeyAuthentication。
验证成功后再关闭密码登录
确认密钥可以登录之后,再考虑把 sshd_config 里的 PasswordAuthentication 改成 no,这样能挡掉绝大多数暴力破解。
改完先用 sshd -t 校验配置,再重启 sshd,并且保留一个已登录的会话,避免把自己锁在门外。
准备动手试试?
TermX 永久免费,三端原生,装好即可连接。