为什么建议改用密钥

密码可以被暴力破解、被日志记录、被复用;密钥是一对数学上匹配的文件,私钥不出本机,服务器只保存公钥,泄露风险低得多。

对经常连多台服务器的人来说,密钥登录还省掉了每次输密码的动作,配合 ssh-agent 可以做到全程无感。

在本机生成密钥对

推荐 ed25519:比 RSA 更短、更快,也更安全。生成的私钥默认在 ~/.ssh/ 下,公钥是同名的 .pub 文件。

ssh-keygen -t ed25519 -C "you@example.com"
回车三次即可。如果设置 passphrase,私钥即使被拷走也无法直接使用,安全性更高。

把公钥放到服务器

最简单的方式是 ssh-copy-id,它会自动处理目录和权限。

如果本机没有这个命令(例如部分 Windows 环境),把公钥内容追加到服务器的 ~/.ssh/authorized_keys 里也一样。

  1. 确认公钥已写入:cat ~/.ssh/authorized_keys
  2. 确认权限正确:chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
  3. 保持当前密码登录的会话不要关,另开一个窗口测试密钥登录。
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your-server

在 TermX 中导入私钥

  1. 新建会话或编辑已有会话,认证方式选「密钥」。
  2. 选择私钥文件(~/.ssh/id_ed25519,注意不是 .pub),如果设置了 passphrase 一并填写。
  3. 保存后连接;成功一次之后,这把密钥会被记住,后续只需选择。
私钥只保存在本机,TermX 不会把它上传到云端;云端仓库同步的是加密后的连接信息。

常见报错与原因

Permission denied (publickey) 是最常见的报错,九成是权限或文件位置问题,而不是密钥本身错了。

  1. 服务器家目录权限过大:chmod 755 ~,.ssh 必须是 700。
  2. authorized_keys 权限过大:chmod 600。
  3. 公钥没换行就直接追加了内容:确保每条公钥独占一行。
  4. SELinux 或云镜像的 sshd 配置禁用了公钥登录:检查 /etc/ssh/sshd_config 里的 PubkeyAuthentication。

验证成功后再关闭密码登录

确认密钥可以登录之后,再考虑把 sshd_config 里的 PasswordAuthentication 改成 no,这样能挡掉绝大多数暴力破解。

改完先用 sshd -t 校验配置,再重启 sshd,并且保留一个已登录的会话,避免把自己锁在门外。

准备动手试试?
TermX 永久免费,三端原生,装好即可连接。
下载 TermX