在 Windows 客户端 与 Linux 服务器 之间配置 SSH 密钥登录(免密登录),可以显著提升安全性与操作效率。以下是完整、清晰、可操作的配置步骤(基于 Windows 10/11 自带 OpenSSH 客户端):
✅ 一、前提条件
- Windows 客户端 :
- 已启用 OpenSSH 客户端(Windows 10 1809+ / Windows 11 默认包含)
- 检查方法:
Win + R→ 输入optionalfeatures→ 查看"OpenSSH 客户端"是否已安装
- 检查方法:
- 已启用 OpenSSH 客户端(Windows 10 1809+ / Windows 11 默认包含)
- Linux 服务器 :
- SSH 服务(sshd)已运行(默认端口 22)
- 你有临时密码可登录一次(用于部署公钥)
🔑 二、在 Windows 上生成 SSH 密钥对
推荐使用 ed25519 算法(比 RSA 更安全高效)
- 打开 PowerShell(以普通用户身份即可)
- 执行以下命令:
powershell
ssh-keygen -t ed25519 -C "your_email_or_comment"
- 按提示操作:
- 保存路径 :直接回车(默认
C:\Users\<用户名>\.ssh\id_ed25519) - 密钥密码(passphrase):可选,建议设一个(增强私钥安全),也可直接回车跳过
- 保存路径 :直接回车(默认
✅ 生成后会得到两个文件:
- 私钥:
id_ed25519(绝不可泄露!) - 公钥:
id_ed25519.pub(需上传到服务器)
📤 三、将公钥上传到 Linux 服务器
方法 1:一键自动上传(推荐)
powershell
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh -p 22 username@server_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
替换:
username:你的 Linux 用户名(如ubuntu、root)server_ip:服务器公网 IP 或内网 IP-p 22:若 SSH 端口不是 22,请修改
⚠️ 首次执行会提示输入 服务器密码(这是最后一次输密码!)
方法 2:手动上传(备用)
- 查看公钥内容:
powershell
type $env:USERPROFILE\.ssh\id_ed25519.pub
-
复制整行输出(以
ssh-ed25519 AAAAC3...开头) -
登录服务器(用密码):
bash
ssh username@server_ip
- 在服务器上执行:
bash
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "粘贴的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
🔒 四、关键权限设置(服务器端必做!)
SSH 对权限极其敏感,权限错误会导致免密失败:
bash
# 设置目录和文件权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 确保家目录不能被其他用户写入(否则 SSH 拒绝公钥)
chmod go-w ~
❌ 错误示例:家目录权限为
777→ 公钥认证会被拒绝!
🧪 五、测试免密登录
在 Windows PowerShell 中执行:
powershell
ssh username@server_ip
✅ 成功标志:直接进入服务器命令行,无需输入密码
若设置了 passphrase,则会提示输入密钥密码(非服务器密码)
📝 六、(可选)配置 SSH config 文件简化连接
编辑文件:C:\Users\<你的用户名>\.ssh\config
添加如下内容:
config
Host myserver
HostName 123.45.67.89
User ubuntu
Port 22
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
之后只需运行:
powershell
ssh myserver
即可免密登录!
🛠 七、VS Code Remote-SSH 免密连接
- 安装 VS Code 插件:Remote - SSH
- 按
Ctrl+Shift+P→ 输入Remote-SSH: Connect to Host - 选择
myserver(即 config 中定义的 Host) - 自动无密码连接成功!
💡 确保 VS Code 的 SSH 配置文件路径正确(默认即
~/.ssh/config)
🚫 八、常见问题排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 仍要求输入密码 | authorized_keys 权限不对 |
执行 chmod 600 ~/.ssh/authorized_keys |
| Permission denied (publickey) | 家目录或 .ssh 权限太宽松 |
chmod go-w ~,chmod 700 ~/.ssh |
| VS Code 无法免密 | 未使用 config 或路径错误 | 检查 Remote.SSH: Config File 设置 |
| 连接超时 | 防火墙/安全组未开放 SSH 端口 | 检查云服务器安全组(如 AWS/Aliyun) |
查看服务器日志定位问题:
bash
sudo tail -f /var/log/auth.log # Ubuntu/Debian
sudo tail -f /var/log/secure # CentOS/RHEL
🔐 九、(进阶)禁用密码登录(提升安全性)
确认免密登录成功后,可彻底关闭密码登录:
- 编辑服务器 SSH 配置:
bash
sudo nano /etc/ssh/sshd_config
- 修改以下两项:
ini
PubkeyAuthentication yes
PasswordAuthentication no
- 重启 SSH 服务:
bash
# Ubuntu/Debian
sudo systemctl restart ssh
# CentOS/RHEL
sudo systemctl restart sshd
⚠️ 务必先测试免密成功再禁用密码!否则可能被锁在服务器外!
通过以上步骤,你已成功实现 Windows → Linux 的 SSH 密钥免密登录,既安全又高效,适用于日常开发、自动化脚本、CI/CD 等场景。
如需多台服务器管理,可为每台生成独立密钥,并在 config 中分别配置。