Skip to content
On this page

Windows 配置 SSH 密钥连接 Linux 服务器

这个流程是在 Windows 本机生成 SSH 密钥,再把公钥添加到 Linux 服务器,用来实现免密码登录。

1. 在 Windows 检查是否已有密钥

打开 PowerShell,执行:

powershell
dir $env:USERPROFILE\.ssh

常见的密钥文件:

文件名说明
id_ed25519Windows 本机私钥,不能泄露
id_ed25519.pub公钥,可以放到 Linux 服务器
id_rsaRSA 私钥
id_rsa.pubRSA 公钥

如果已经有可用密钥,可以跳过生成步骤。

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 权限是否为 700authorized_keys 是否为 600
连接超时检查服务器 IP、端口、安全组、防火墙和 SSH 服务是否正常
使用了非默认端口连接时加 -p,例如 ssh 用户名@服务器IP -p 2222