Linux 配置密钥登录
拿到新的 VPS 后,为了安全可以在 ssh 中禁止 root 账户登录,把默认的 22 端口修改掉,最好配置为密钥(公钥)登录、禁用密码登录。本文记录的是配置密钥(公钥)登录和禁用密码登录的过程,系统版本是 Debian 13。
客户端生成密钥对
需要连接 VPS 的客户端,在终端执行:
ssh-keygen -t ed25519 -C "备注名称"
一路回车,生成两个文件:
| 文件 | 说明 |
|---|---|
| ~/.ssh/id_ed25519 | 私钥,留在本地,不要泄露 |
| ~/.ssh/id_ed25519.pub | 公钥,需要上传到服务器 |
Windows 系统的路径为 C:\Users\用户名\.ssh\。
查看公钥内容:
# Linux 和 macOS
cat ~/.ssh/id_ed25519.pub
# Windows
type %USERPROFILE%\.ssh\id_ed25519.pub
对于不支持生成密钥对的客户端,可以把其他客户端生成的私钥导入后用于登录,需要确保对应公钥已经添加到服务器上。
VPS 服务器配置
Linux 和 macOS
把公钥添加到服务器:
# 方法一:ssh-copy-id(macOS / Linux 客户端可用)
ssh-copy-id user@服务器IP
# 方法二:手动追加(通用)
echo "包括备注在内完整的公钥内容" >> ~/.ssh/authorized_keys
确认权限正确**(可选,仅无法连接时)**:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
确认 sshd 配置,允许公钥并禁止密码(/etc/ssh/sshd_config):
PubkeyAuthentication yes
PasswordAuthentication no # 确认密钥登录正常后再改
部分 VPS 可能在/etc/ssh/sshd_config.d/ 下有额外配置文件会覆盖主配置,需一并检查:
grep -r "PasswordAuthentication" /etc/ssh/sshd_config.d/
重启 sshd
# Linux
sudo systemctl restart sshd
# macOS
sudo launchctl stop com.openssh.sshd
sudo launchctl start com.openssh.sshd
Windows Server
确保已经安装了系统提供的 OpenSSH Server,安装方式是 设置 → 系统 → 可选功能 → 添加功能 → OpenSSH 服务器,或 PowerShell(管理员):
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
把公钥添加到服务器,PowerShell(管理员)执行:
# 普通用户
Add-Content -Path "C:\Users\用户名\.ssh\authorized_keys" -Value "包括备注在内完整的公钥内容"
# 管理员组用户(包括 Administrator)路径不同
Add-Content -Path "C:\ProgramData\ssh\administrators_authorized_keys" -Value "包括备注在内完整的公钥内容"
管理员账户可能还需要修复权限,否则 OpenSSH 会忽略该文件 (可选,仅无法连接时):
icacls "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "SYSTEM:(F)" /grant "Administrators:(F)"
确认 sshd 配置,允许公钥并禁止密码(C:\ProgramData\ssh\sshd_config)。Windows 默认允许公钥登录,如果需要禁用密码登录,以管理员身份编辑 C:\ProgramData\ssh\sshd_config,确认/修改这两行:
PubkeyAuthentication yes
PasswordAuthentication no
如果 sshd_config 里改了但没生效,检查文件末尾是否有 Match Group administrators 这样的段,里面可能单独覆盖了 AuthorizedKeysFile 或认证方式,需要在对应 Match 块内也确认设置正确。
默认 sshd_config 里可能还有一行:
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
这个不影响密码登录开关。
重启 sshd,以管理员权限执行:
Restart-Service sshd
客户端连接方式
Linux 和 macOS
# 直连
ssh user@服务器IP
# 通过跳板机
ssh -J 跳板用户@跳板IP 目标用户@目标IP
Windows (PowerShell / CMD)
与 macOS 和 Linux 完全相同,Windows 10 以上自带 OpenSSH 客户端。
PuTTY
PuTTY 使用自己的 .ppk 格式,需要先转换:
- 打开 PuTTYgen → Conversions → Import Key → 选择
id_ed25519 - 点 Save private key 保存为
.ppk - PuTTY 中:Connection → SSH → Auth → Credentials → 选择
.ppk
配置跳板机:Connection → SSH → Proxy → Proxy type 选 SSH,填入跳板机地址和用户名。
注意事项
修改 sshd_config 禁用密码登录前,务必先在 新窗口 测试密钥登录成功,再关闭旧连接;
私钥(id_ed25519)不要导入/复制到不信任的机器上。