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 格式,需要先转换:

  1. 打开 PuTTYgen → Conversions → Import Key → 选择 id_ed25519
  2. Save private key 保存为 .ppk
  3. PuTTY 中:Connection → SSH → Auth → Credentials → 选择 .ppk

配置跳板机:Connection → SSH → Proxy → Proxy type 选 SSH,填入跳板机地址和用户名。

注意事项

修改 sshd_config 禁用密码登录前,务必先在 新窗口 测试密钥登录成功,再关闭旧连接;

私钥(id_ed25519)不要导入/复制到不信任的机器上。

评论