云计算百科
云计算领域专业知识百科平台

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

/* 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 后:

  • 点击左侧扩展按钮
  • 搜索 Remote – SSH
  • 安装扩展 Remote – SSH
  • 你也可以在命令行安装:

    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,执行:

    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 的使用会很顺。

    使用方式

  • 打开 VS Code
  • 打开命令面板
  • 选择 Remote-SSH: Connect to Host…
  • 选择你配置好的 my-server
  • 为什么推荐先配 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,都会轻松很多。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 从零开始:Windows 连接 Linux 服务器的 SSH 免密登录教程
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!