Windows 配置 SSH 密钥连接 Linux 服务器
这个流程是在 Windows 本机生成 SSH 密钥,再把公钥添加到 Linux 服务器,用来实现免密码登录。
1. 在 Windows 检查是否已有密钥
打开 PowerShell,执行:
powershell
dir $env:USERPROFILE\.ssh
常见的密钥文件:
| 文件名 | 说明 |
|---|---|
id_ed25519 | Windows 本机私钥,不能泄露 |
id_ed25519.pub | 公钥,可以放到 Linux 服务器 |
id_rsa | RSA 私钥 |
id_rsa.pub | RSA 公钥 |
如果已经有可用密钥,可以跳过生成步骤。
2. 在 Windows 生成 SSH 密钥
优先使用 ed25519 算法:
powershell
ssh-keygen -t ed25519 -C "windows-to-linux"
执行后按提示操作:
| 提示 | 建议 |
|---|---|
| 保存路径 | 直接回车,使用默认路径 C:\Users\你的用户名\.ssh\id_ed25519 |
| passphrase 密码短语 | 可以直接回车留空,也可以设置一个额外保护密码 |
如果环境不支持 ed25519,再使用 RSA:
powershell
ssh-keygen -t rsa -b 4096 -C "windows-to-linux"
3. 复制 Windows 公钥内容
powershell
type $env:USERPROFILE\.ssh\id_ed25519.pub
复制输出的整行内容,后面要写入 Linux 服务器的 authorized_keys。
4. 先用密码登录 Linux 服务器
powershell
ssh 用户名@服务器IP
例子:
powershell
ssh root@192.168.1.10
第一次连接时会提示是否信任主机,输入 yes 后回车。
5. 在 Linux 服务器创建 SSH 配置目录
登录到 Linux 服务器后执行:
bash
mkdir -p ~/.ssh
chmod 700 ~/.ssh
6. 把 Windows 公钥写入 Linux
在 Linux 服务器执行:
bash
nano ~/.ssh/authorized_keys
把第 3 步复制的公钥粘贴进去,保存退出。
如果不使用 nano,也可以用追加方式写入:
bash
echo "这里粘贴你的公钥内容" >> ~/.ssh/authorized_keys
然后设置权限:
bash
chmod 600 ~/.ssh/authorized_keys
7. 从 Windows 测试免密登录
退出 Linux 服务器:
bash
exit
回到 Windows PowerShell 后再次连接:
powershell
ssh 用户名@服务器IP
如果不再要求输入服务器用户密码,说明 SSH 密钥登录配置成功。
8. 可选:给服务器配置别名
在 Windows 创建或编辑 SSH 配置文件:
powershell
notepad $env:USERPROFILE\.ssh\config
写入:
ssh-config
Host my-linux
HostName 服务器IP
User 用户名
IdentityFile ~/.ssh/id_ed25519
之后可以直接登录:
powershell
ssh my-linux
9. 常见问题
| 问题 | 处理方式 |
|---|---|
Permission denied | 检查 Linux 的 ~/.ssh/authorized_keys 是否写入了正确公钥 |
| 仍然要求输入密码 | 检查 ~/.ssh 权限是否为 700,authorized_keys 是否为 600 |
| 连接超时 | 检查服务器 IP、端口、安全组、防火墙和 SSH 服务是否正常 |
| 使用了非默认端口 | 连接时加 -p,例如 ssh 用户名@服务器IP -p 2222 |