SSH公钥认证客户端配置步骤(Windows/Linux)

概要

本文介绍如何在客户端侧配置 SSH 公钥认证,以便安全地连接至服务器。适用于 Windows 与 Linux 系统。

前提条件

  • 系统自带 SSH 客户端(Windows 10 及以上版本、Linux 通常已内置)
  • 服务器已启用公钥认证
  • 目标服务器上存在对应的登录用户

密钥类型与加密方式

SSH 常用的密钥类型包括 RSA、ECDSA 与 Ed25519。以下表格对比了它们的特点与推荐用途。

密钥类型 特点 推荐用途 兼容性
RSA 历史悠久,支持可变密钥长度,兼容性好 兼容性优先的环境 极高
ECDSA 使用椭圆曲线算法,性能优于 RSA 性能优先的环境 中等
Ed25519 新标准,安全且高效,密钥短 新部署、重视安全的环境 仅限较新 SSH 实现

目前推荐使用 Ed25519。自 OpenSSH 6.5(2014 年发布)起已支持。RSA 仍为兼容性最佳的选择,而 ECDSA 处于二者之间。

变量说明

下表展示了文中使用的环境变量示例:

变量名 示例值 说明
<<USERNAME>> exampleuser 本地登录用户名
<<SERVER>> 192.168.1.10 服务器地址或主机名
<<USER>> ubuntuec2-user 服务器登录用户名
<<EMAIL_ADDRESS>> user@example.com 可选:公钥注释邮箱

关于 Windows 命令执行

所有命令均基于 PowerShell。若不可用,可改用 cmd(命令提示符)。
$env:USERPROFILE 在 cmd 中对应 %USERPROFILE%

Windows 客户端设置

Step 1: 生成密钥对

以管理员身份打开 PowerShell:

ssh-keygen -t ed25519 -C "<<EMAIL_ADDRESS>>"

注:-C 为注释,可选。
为方便自动化,以下步骤默认不设置密码短语

输出示例:

Generating public/private ed25519 key pair.
Enter file in which to save the key (/C:/Users/<<USERNAME>>/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Your identification has been saved in /C:/Users/<<USERNAME>>/.ssh/id_ed25519
Your public key has been saved in /C:/Users/<<USERNAME>>/.ssh/id_ed25519.pub

公钥: $env:USERPROFILE\.ssh\id_ed25519.pub
私钥: $env:USERPROFILE\.ssh\id_ed25519

Step 2: 上传公钥至服务器

cat $env:USERPROFILE\.ssh\id_ed25519.pub | ssh <<USER>>@<<SERVER>> "mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys"

或手动复制内容至服务器的 ~/.ssh/authorized_keys

Step 3: 测试连接

ssh -i $env:USERPROFILE\.ssh\id_ed25519 <<USER>>@<<SERVER>>

首次连接需输入 “yes” 确认指纹。


Linux 客户端设置

Step 1: 生成密钥对

ssh-keygen -t ed25519 -C "<<EMAIL_ADDRESS>>"

注:同样不设置密码短语以便自动化使用。

输出示例:

Enter file in which to save the key (/home/<<USERNAME>>/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):

公钥: ~/.ssh/id_ed25519.pub
私钥: ~/.ssh/id_ed25519

Step 2: 上传公钥至服务器

使用 ssh-copy-id 自动完成:

ssh-copy-id -i ~/.ssh/id_ed25519.pub <<USER>>@<<SERVER>>

或手动复制至 ~/.ssh/authorized_keys

Step 3: 测试连接

ssh -i ~/.ssh/id_ed25519 <<USER>>@<<SERVER>>

使用带密码短语的密钥

若密钥设有密码短语,可启用 SSH Agent 保存会话凭据。

Step 1: 启动 SSH Agent

Windows:

Set-Service -Name ssh-agent -StartupType Manual
Start-Service ssh-agent

Linux:

eval "$(ssh-agent -s)"

自动启动设置:

  • Windows:
Set-Service -Name ssh-agent -StartupType Automatic
  • Linux:
    ~/.bashrc~/.profile 添加:
eval "$(ssh-agent -s)" > /dev/null

Step 2: 注册密钥

Windows:

ssh-add $env:USERPROFILE\.ssh\id_ed25519

Linux:

ssh-add ~/.ssh/id_ed25519

注册后即可免输入密码短语。

Step 3: 确认状态

ssh-add -l

若显示指纹则说明注册成功。


使用 SSH 配置文件(config)

创建或编辑 ~/.ssh/config
(Windows 路径:C:\Users\<<USERNAME>>\.ssh\config

示例

Host myserver
    HostName <<SERVER>>
    User <<USER>>
    IdentityFile ~/.ssh/id_ed25519
    Port 22

Windows 需写为:

IdentityFile $env:USERPROFILE\.ssh\id_ed25519

使用方法:

ssh myserver

多服务器示例

Host web
    HostName 192.168.1.10
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519

Host db
    HostName 192.168.1.11
    User ec2-user
    IdentityFile ~/.ssh/id_ed25519

建议不同服务器使用不同密钥,分别指定 IdentityFile


验证连接

查看详细日志:

ssh -vvv -i ~/.ssh/id_ed25519 <<USER>>@<<SERVER>>

出现 Authentication succeeded (publickey) 即代表成功。


故障排查

常见原因:

  1. 服务器未启用公钥认证
    检查 /etc/ssh/sshd_configPubkeyAuthentication yes
  2. 公钥未正确注册
    确认 ~/.ssh/authorized_keys 权限为 600。
  3. 连接信息错误或权限问题
    用户或主机名错误、文件属主不匹配等。

总结

通过 SSH 公钥认证可避免明文密码,提高连接安全性。
Windows 与 Linux 均可使用 ssh-keygen 快速生成密钥,并通过配置文件实现高效管理。