从零开始:Windows 连接 Linux 服务器的 SSH 免密登录教程

适合 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 后:

  1. 点击左侧扩展按钮
  2. 搜索 Remote - SSH
  3. 安装扩展 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 连接

所以推荐顺序是:

  1. 先安装 Remote - SSH
  2. 再执行 ssh -V 检查本机是否已有 OpenSSH
  3. 如果没有,再补装 OpenSSH Client

安装方法 1:通过 Windows 可选功能安装

  1. 打开 设置
  2. 进入 应用
  3. 点击 可选功能
  4. 搜索 OpenSSH Client
  5. 点击安装

安装方法 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 目录:700
  • authorized_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 的使用会很顺。

使用方式

  1. 打开 VS Code
  2. 打开命令面板
  3. 选择 Remote-SSH: Connect to Host...
  4. 选择你配置好的 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/configIdentityFile 写错
  • 你以为空密码,其实私钥有 passphrase

优先检查服务器:

bash 复制代码
cat ~/.ssh/authorized_keys
ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys

再在本机执行:

powershell 复制代码
ssh -vvv my-server exit

重点看调试信息里是否出现:

  • Offering public key
  • Server 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,都会轻松很多。

相关推荐
神の愛6 小时前
左连接查询数据 left join
java·服务器·前端
九皇叔叔7 小时前
Ubuntu 22.04 版本常用设置
linux·运维·ubuntu
南境十里·墨染春水7 小时前
linux学习进展 线程同步——互斥锁
java·linux·学习
杨云龙UP8 小时前
ODA登录ODA Web管理界面时提示Password Expired的处理方法_20260423
linux·运维·服务器·数据库·oracle
郑寿昌9 小时前
IIoT本体迁移的领域扩展机制
服务器·前端·microsoft
songx_999 小时前
Linux基础2
linux·运维·服务器
longerxin20209 小时前
卸载 CCleaner 失败?用 Revo Uninstaller 彻底清干净(附官方下载 + 详细步骤)
windows
我想要SSR9 小时前
搭建小龙虾过程和坑点
linux·服务器·ai
莫白媛10 小时前
Linux在限制敏感命令下的修改用户密码小白版
linux·运维·服务器
Rcnhtin11 小时前
RocketMQ
java·linux·rocketmq