/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}
适合 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 配置
- 让后续新增服务器时也能按同样的方法继续管理
完成后,你应该可以直接这样连接:
ssh my-server-name
而不需要再一遍遍输入密码。
二、优先在 VS Code 里安装 Remote – SSH
如果你的主要目标是通过 VS Code 连接服务器,那么最推荐先把 VS Code 这条链路准备好。
第一步:安装 VS Code 扩展
打开 VS Code 后:
你也可以在命令行安装:
code —install-extension ms-vscode-remote.remote-ssh
安装完成后,VS Code 就具备了远程连接 Linux 服务器的能力。
三、检查本机是否已有 OpenSSH,没装再补
安装了 Remote – SSH 之后,通常仍然需要本机具备可用的 OpenSSH Client。
更准确地说:
- Remote – SSH 负责 VS Code 的远程工作流
- OpenSSH Client 负责本机真正发起 SSH 连接
所以推荐顺序是:
安装方法 1:通过 Windows 可选功能安装
安装方法 2:通过 PowerShell 安装
以管理员身份打开 PowerShell,执行:
Add-WindowsCapability –Online –Name OpenSSH.Client~~~~0.0.1.0
验证是否安装成功
在 PowerShell 中执行:
ssh –V
如果能看到类似下面的输出,说明已经安装成功:
OpenSSH_for_Windows_9.x
四、准备工作
你需要准备下面这些信息:
- 服务器公网 IP
- SSH 端口,通常是 22
- 服务器用户名,通常是 root
- 当前仍可用的登录密码
- 一台 Windows 电脑
五、在本机生成 SSH 密钥
建议使用 PowerShell,不要在 CMD 中直接使用 $HOME。
执行:
ssh-keygen –t ed25519 –f $HOME\\.ssh\\id_ed25519_my_server –N ''
参数解释
- -t ed25519:生成现代且通用的 SSH 密钥类型
- -f:指定密钥文件位置
- -N '':把私钥密码设置为空,方便免密登录
执行成功后,通常会生成两个文件:
C:\\Users\\你的用户名\\.ssh\\id_ed25519_my_server
C:\\Users\\你的用户名\\.ssh\\id_ed25519_my_server.pub
其中:
- .pub 结尾的是公钥,可以放到服务器上
- 不带 .pub 的是私钥,必须保存在本机,不要泄露
查看公钥内容:
type $HOME\\.ssh\\id_ed25519_my_server.pub
你会看到类似:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI…… yourname@your-pc
后面要把这整行复制到服务器上。
六、把公钥放到 Linux 服务器上
先通过密码方式正常登录服务器,然后执行下面的命令。
如果你使用的是 root
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 替换成对应用户目录,例如:
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 配置,最好确认一下。
执行:
sshd -T | grep -E 'pubkeyauthentication|passwordauthentication|permitrootlogin|authorizedkeysfile'
推荐结果里至少应包含:
pubkeyauthentication yes
authorizedkeysfile .ssh/authorized_keys
如果你要显式开启 root 公钥登录,可以额外写一个配置文件:
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:
sshd -t && (systemctl restart ssh || systemctl restart sshd)
八、在 Windows 本机配置 SSH 别名
编辑这个文件:
C:\\Users\\你的用户名\\.ssh\\config
加入下面这段:
Host my-server
HostName 服务器公网IP
User root
Port 22
IdentityFile ~/.ssh/id_ed25519_my_server
示例
Host my-server
HostName 1.2.3.4
User root
Port 22
IdentityFile ~/.ssh/id_ed25519_my_server
这样以后你就可以把:
ssh root@1.2.3.4
简化成:
ssh my-server
如果你后续有多台服务器,也可以继续往这个文件里添加。
九、首次验证 SSH 免密登录
第一次连接时,建议这样执行:
ssh –o StrictHostKeyChecking=accept-new my-server "echo SSH_OK"
如果成功,你会看到:
SSH_OK
然后再正式登录:
ssh my-server
如果不再提示输入密码,说明免密已经配置成功。
十、在 VS Code 中连接服务器
当上面的 SSH 已经打通之后,VS Code 的使用会很顺。
使用方式
为什么推荐先配 SSH 再进 VS Code
因为 VS Code Remote – SSH 最终还是调用本机 SSH。
所以如果下面这条命令已经正常:
ssh my-server "echo OK"
那 VS Code 成功率通常也会高很多。
十一、常见报错与排障方法
1. Host key verification failed
这通常表示:
- 本机还没有信任这台服务器的 host key
- 或服务器重装后,host key 变了
可以先执行:
ssh –o StrictHostKeyChecking=accept-new my-server
如果仍有冲突,就检查 known_hosts 里的旧记录。
2. Permission denied (publickey,password)
常见原因:
- 公钥没有写对
- authorized_keys 权限不对
- .ssh/config 中 IdentityFile 写错
- 你以为空密码,其实私钥有 passphrase
优先检查服务器:
cat ~/.ssh/authorized_keys
ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys
再在本机执行:
ssh –vvv my-server exit
重点看调试信息里是否出现:
- Offering public key
- Server accepts key
3. 在 CMD 里使用 $HOME 报错
这是因为 $HOME 是 PowerShell 变量,不是 CMD 变量。
如果你使用的是 CMD,请写完整路径:
ssh-keygen -t ed25519 -f C:\\Users\\你的用户名\\.ssh\\id_ed25519_my_server -N ""
4. VS Code 仍然提示超时
先确认下面这条命令已经成功:
ssh my-server "echo OK"
如果命令行本身都不稳定,就不要先怪 VS Code,先把 SSH 本身修好。
十二、推荐的最终文件结构
Windows 本机
C:\\Users\\你的用户名\\.ssh\\
├─ config
├─ known_hosts
├─ id_ed25519_my_server
└─ id_ed25519_my_server.pub
Linux 服务器
/root/.ssh/
├─ authorized_keys
十三、最短可复用版命令清单
Windows 本机
ssh-keygen –t ed25519 –f $HOME\\.ssh\\id_ed25519_my_server –N ''
type $HOME\\.ssh\\id_ed25519_my_server.pub
Linux 服务器
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 配置
Host my-server
HostName 服务器公网IP
User root
Port 22
IdentityFile ~/.ssh/id_ed25519_my_server
首次验证
ssh –o StrictHostKeyChecking=accept-new my-server "echo SSH_OK"
十四、结语
SSH 免密登录本质上不复杂,核心就三件事:
- 本机生成密钥
- 把公钥放到服务器
- 在本机配置 ~/.ssh/config
一旦这套流程跑通,后面不管你是用 PowerShell、VS Code、Xshell,还是管理多台 VPS,都会轻松很多。
网硕互联帮助中心






评论前必须登录!
注册