易君召
易君召
发布于 2026-10-22 / 5 阅读
0

SSH 密钥登录完整配置教程

核心原理:非对称密钥,私钥放本地、公钥上传服务器,免密、比密码登录更安全。

推荐:使用 ed25519 密钥(优先,安全、短),兼容差的老服务器再用 rsa。

一、客户端生成密钥对

1. Linux / Mac / WSL(终端)

# 生成 ed25519 密钥(推荐)
ssh-keygen -t ed25519 -C "your-email@example.com"
  • -C:备注,方便区分密钥

  • 回车后:

    1. 保存路径:默认 ~/.ssh/id_ed25519,直接回车即可

    2. 密钥口令(passphrase):可选填!

      • 填了:每次使用私钥都要输这个口令(更安全,推荐)

      • 不填:直接免密登录

如果服务器很老不支持 ed25519,换 RSA:

ssh-keygen -t rsa -b 4096 -C "your-email@example.com"

生成后两个文件:

  • id_ed25519:私钥!绝对不能泄露

  • id_ed25519.pub:公钥,上传到服务器

2. Windows 客户端两种方式

方式 A:PowerShell(自带 OpenSSH,Win10 1809+)

打开 PowerShell,命令同上:

ssh-keygen -t ed25519 -C "your-email@example.com"

默认路径:C:\Users\你的用户名\.ssh\id_ed25519

方式 B:Xshell / FinalShell

工具内【用户密钥管理】→ 新建密钥,选择 ed25519,导出公钥。

二、把公钥上传到远程服务器(3 种方法)

前提:现在你还能密码 SSH 连上服务器

方法 1:ssh-copy-id(最简单,Linux/Mac/WSL)

ssh-copy-id -i ~/.ssh/id_ed25519.pub root@服务器IP
  • 替换 root 和服务器 IP,输入一次服务器密码

  • 自动把公钥追加到 ~/.ssh/authorized_keys,自动处理权限

方法 2:手动追加公钥(通用,所有平台都能用)

  1. 先登录服务器

ssh root@服务器IP
  1. 服务器上创建 ssh 目录(不存在才需要)

mkdir -p ~/.ssh
chmod 700 ~/.ssh
  1. 把本地 id_ed25519.pub 全部内容复制

  2. 追加到授权文件

echo "粘贴你的公钥整串内容" >> ~/.ssh/authorized_keys
  1. 设置关键权限(权限不对会直接登录失败!SSH 很严格)

chmod 600 ~/.ssh/authorized_keys

✅ 权限标准:

  • .ssh 目录:700

  • authorized_keys:600

  • 属主必须是登录用户,不能是 root 或者其他用户

方法 3:FinalShell/Xshell 图形化上传

连接服务器 → 右键会话 → 密钥上传,粘贴公钥。

三、服务端 SSH 配置(/etc/ssh/sshd_config)

登录服务器编辑 sshd 配置:

vi /etc/ssh/sshd_config

确保下面几项配置(按需开启)

# 开启公钥认证
PubkeyAuthentication yes
# 公钥存放文件
AuthorizedKeysFile .ssh/authorized_keys
# 可选:关闭密码登录(密钥调试成功后再关!防止锁服务器)
# PasswordAuthentication no
# 可选:禁止root密码登录(安全加固)
# PermitRootLogin prohibit-password

⚠️ 重要:先不要关闭 PasswordAuthentication! 密钥登录测试成功之后,再关闭密码登录,否则连不上服务器。

修改完重启 sshd 服务:

# CentOS / RHEL / Rocky / openEuler
systemctl restart sshd

# Debian / Ubuntu
systemctl restart ssh

四、测试密钥登录

本地执行:

ssh root@服务器IP
  • 没设置私钥口令:直接登录成功

  • 设置了私钥口令:输入你生成密钥时的 passphrase(不是服务器密码)

Windows PowerShell 指定私钥文件(多密钥场景)

ssh -i C:\Users\XXX\.ssh\id_ed25519 root@IP

本地配置~/.ssh/config(简化命令,推荐)

在本地 .ssh 新建 config 文件,权限 600

Host myserver
  HostName 123.123.123.123
  User root
  IdentityFile ~/.ssh/id_ed25519

之后直接登录:

ssh myserver

五、常见踩坑排查(登不上优先看这里)

  1. ❌ 权限问题(最高发) .ssh 目录 700,authorized_keys 必须 600,不能组 / 其他可读。

# 服务器上修复权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R $USER:$USER ~/.ssh
  1. ❌ 公钥粘贴错误,多换行、多空格、少字符 公钥是一整行,不要换行!

  2. ❌ sshd 配置没生效,忘记重启 sshd

  3. ❌ 防火墙 / 安全组:22 端口不通(密钥登录端口还是 22,和密码一样)

  4. ❌ SELinux 拦截(CentOS/RHEL 常见) 查看日志:tail -f /var/log/secure 如果是 selinux 问题:

restorecon -R ~/.ssh
  1. ❌ 私钥本地权限过大(Linux/WSL) 本地私钥权限必须严格:

chmod 600 ~/.ssh/id_ed25519
  1. 查看 sshd 日志定位失败原因(神器)

# centos
tail -f /var/log/secure
# ubuntu/debian
tail -f /var/log/auth.log

六、安全加固(调试通过后执行)

确认密钥登录完全没问题,再关闭密码登录:

PasswordAuthentication no

重启 sshd。

一旦关闭密码登录,私钥丢了就无法 SSH 进服务器,云服务器记得保留控制台 VNC / 堡垒机兜底。


本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。

原文链接 https://www.yijunzhao.cn/archives/ssh-key-login-complete-configuration-guide

欢迎访问 小易撩挨踢

https://www.yijunzhao.cn/