适合 Windows 用户、VPS 用户、VS Code Remote - SSH 用户。
本文已脱敏,所有 IP、账号、密码、公钥均为示例写法。
一、这篇教程能帮你解决什么问题
很多人在第一次连接 Linux 服务器时,都会遇到这些烦人的情况:
- 每次 SSH 登录都要重复输入密码
- VS Code Remote - SSH 总是提示输入密码,甚至连接超时
- 一台服务器能连,多台服务器之后
.ssh/config开始混乱 - 明明已经配了密钥,但还是出现
Permission denied (publickey,password)
这篇教程的目标很明确:
- 让 Windows 本机可以通过 SSH 免密登录 Linux 服务器
- 让 VS Code 直接复用这套 SSH 配置
- 让后续新增服务器时也能按同样的方法继续管理
完成后,你应该可以直接这样连接:
powershell
ssh my-server-name
而不需要再一遍遍输入密码。
二、优先在 VS Code 里安装 Remote - SSH
如果你的主要目标是通过 VS Code 连接服务器,那么最推荐先把 VS Code 这条链路准备好。
第一步:安装 VS Code 扩展
打开 VS Code 后:
- 点击左侧扩展按钮
- 搜索
Remote - SSH - 安装扩展
Remote - SSH
你也可以在命令行安装:
powershell
code --install-extension ms-vscode-remote.remote-ssh
安装完成后,VS Code 就具备了远程连接 Linux 服务器的能力。
三、检查本机是否已有 OpenSSH,没装再补
安装了 Remote - SSH 之后,通常仍然需要本机具备可用的 OpenSSH Client。
更准确地说:
Remote - SSH负责 VS Code 的远程工作流OpenSSH Client负责本机真正发起 SSH 连接
所以推荐顺序是:
- 先安装
Remote - SSH - 再执行
ssh -V检查本机是否已有 OpenSSH - 如果没有,再补装
OpenSSH Client
安装方法 1:通过 Windows 可选功能安装
- 打开
设置 - 进入
应用 - 点击
可选功能 - 搜索
OpenSSH Client - 点击安装
安装方法 2:通过 PowerShell 安装
以管理员身份打开 PowerShell,执行:
powershell
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
验证是否安装成功
在 PowerShell 中执行:
powershell
ssh -V
如果能看到类似下面的输出,说明已经安装成功:
text
OpenSSH_for_Windows_9.x
四、准备工作
你需要准备下面这些信息:
- 服务器公网 IP
- SSH 端口,通常是
22 - 服务器用户名,通常是
root - 当前仍可用的登录密码
- 一台 Windows 电脑
五、在本机生成 SSH 密钥
建议使用 PowerShell ,不要在 CMD 中直接使用 $HOME。
执行:
powershell
ssh-keygen -t ed25519 -f $HOME\.ssh\id_ed25519_my_server -N ''
参数解释
-t ed25519:生成现代且通用的 SSH 密钥类型-f:指定密钥文件位置-N '':把私钥密码设置为空,方便免密登录
执行成功后,通常会生成两个文件:
text
C:\Users\你的用户名\.ssh\id_ed25519_my_server
C:\Users\你的用户名\.ssh\id_ed25519_my_server.pub
其中:
.pub结尾的是公钥,可以放到服务器上- 不带
.pub的是私钥,必须保存在本机,不要泄露
查看公钥内容:
powershell
type $HOME\.ssh\id_ed25519_my_server.pub
你会看到类似:
text
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI...... yourname@your-pc
后面要把这整行复制到服务器上。
六、把公钥放到 Linux 服务器上
先通过密码方式正常登录服务器,然后执行下面的命令。
如果你使用的是 root
bash
mkdir -p /root/.ssh
chmod 700 /root/.ssh
printf '%s\n' '这里替换成你的整行公钥' >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
chown -R root:root /root/.ssh
如果你使用的是普通用户
把 /root 替换成对应用户目录,例如:
bash
mkdir -p /home/youruser/.ssh
chmod 700 /home/youruser/.ssh
printf '%s\n' '这里替换成你的整行公钥' >> /home/youruser/.ssh/authorized_keys
chmod 600 /home/youruser/.ssh/authorized_keys
chown -R youruser:youruser /home/youruser/.ssh
为什么这些权限很重要
SSH 对权限比较严格。
如果权限不正确,即使公钥内容没问题,也可能登录失败。
最常见要求是:
.ssh目录:700authorized_keys文件:600
七、确认服务器允许公钥登录
大部分 Debian、Ubuntu 默认都允许,但如果你改过 SSH 配置,最好确认一下。
执行:
bash
sshd -T | grep -E 'pubkeyauthentication|passwordauthentication|permitrootlogin|authorizedkeysfile'
推荐结果里至少应包含:
text
pubkeyauthentication yes
authorizedkeysfile .ssh/authorized_keys
如果你要显式开启 root 公钥登录,可以额外写一个配置文件:
bash
mkdir -p /etc/ssh/sshd_config.d
cat >/etc/ssh/sshd_config.d/99-key-login.conf <<'EOF'
PubkeyAuthentication yes
PasswordAuthentication yes
PermitRootLogin yes
AuthorizedKeysFile .ssh/authorized_keys
EOF
然后测试配置并重启 SSH:
bash
sshd -t && (systemctl restart ssh || systemctl restart sshd)
八、在 Windows 本机配置 SSH 别名
编辑这个文件:
text
C:\Users\你的用户名\.ssh\config
加入下面这段:
sshconfig
Host my-server
HostName 服务器公网IP
User root
Port 22
IdentityFile ~/.ssh/id_ed25519_my_server
示例
sshconfig
Host my-server
HostName 1.2.3.4
User root
Port 22
IdentityFile ~/.ssh/id_ed25519_my_server
这样以后你就可以把:
powershell
ssh root@1.2.3.4
简化成:
powershell
ssh my-server
如果你后续有多台服务器,也可以继续往这个文件里添加。
九、首次验证 SSH 免密登录
第一次连接时,建议这样执行:
powershell
ssh -o StrictHostKeyChecking=accept-new my-server "echo SSH_OK"
如果成功,你会看到:
text
SSH_OK
然后再正式登录:
powershell
ssh my-server
如果不再提示输入密码,说明免密已经配置成功。
十、在 VS Code 中连接服务器
当上面的 SSH 已经打通之后,VS Code 的使用会很顺。
使用方式
- 打开 VS Code
- 打开命令面板
- 选择
Remote-SSH: Connect to Host... - 选择你配置好的
my-server
为什么推荐先配 SSH 再进 VS Code
因为 VS Code Remote - SSH 最终还是调用本机 SSH。
所以如果下面这条命令已经正常:
powershell
ssh my-server "echo OK"
那 VS Code 成功率通常也会高很多。
十一、常见报错与排障方法
1. Host key verification failed
这通常表示:
- 本机还没有信任这台服务器的 host key
- 或服务器重装后,host key 变了
可以先执行:
powershell
ssh -o StrictHostKeyChecking=accept-new my-server
如果仍有冲突,就检查 known_hosts 里的旧记录。
2. Permission denied (publickey,password)
常见原因:
- 公钥没有写对
authorized_keys权限不对.ssh/config中IdentityFile写错- 你以为空密码,其实私钥有 passphrase
优先检查服务器:
bash
cat ~/.ssh/authorized_keys
ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys
再在本机执行:
powershell
ssh -vvv my-server exit
重点看调试信息里是否出现:
Offering public keyServer accepts key
3. 在 CMD 里使用 $HOME 报错
这是因为 $HOME 是 PowerShell 变量,不是 CMD 变量。
如果你使用的是 CMD,请写完整路径:
cmd
ssh-keygen -t ed25519 -f C:\Users\你的用户名\.ssh\id_ed25519_my_server -N ""
4. VS Code 仍然提示超时
先确认下面这条命令已经成功:
powershell
ssh my-server "echo OK"
如果命令行本身都不稳定,就不要先怪 VS Code,先把 SSH 本身修好。
十二、推荐的最终文件结构
Windows 本机
text
C:\Users\你的用户名\.ssh\
├─ config
├─ known_hosts
├─ id_ed25519_my_server
└─ id_ed25519_my_server.pub
Linux 服务器
text
/root/.ssh/
├─ authorized_keys
十三、最短可复用版命令清单
Windows 本机
powershell
ssh-keygen -t ed25519 -f $HOME\.ssh\id_ed25519_my_server -N ''
type $HOME\.ssh\id_ed25519_my_server.pub
Linux 服务器
bash
mkdir -p /root/.ssh
chmod 700 /root/.ssh
printf '%s\n' '这里替换成你的整行公钥' >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
chown -R root:root /root/.ssh
Windows 本机 SSH 配置
sshconfig
Host my-server
HostName 服务器公网IP
User root
Port 22
IdentityFile ~/.ssh/id_ed25519_my_server
首次验证
powershell
ssh -o StrictHostKeyChecking=accept-new my-server "echo SSH_OK"
十四、结语
SSH 免密登录本质上不复杂,核心就三件事:
- 本机生成密钥
- 把公钥放到服务器
- 在本机配置
~/.ssh/config
一旦这套流程跑通,后面不管你是用 PowerShell、VS Code、Xshell,还是管理多台 VPS,都会轻松很多。