VSCode远程连接虚拟机完整教程

VSCode远程连接虚拟机完整教程

本文将详细介绍如何使用VSCode的Remote-SSH功能连接到Linux虚拟机,实现远程开发。

简介

在日常开发中,我们经常需要在远程服务器或虚拟机上进行开发工作。VSCode提供了Remote-SSH扩展,可以让我们直接在本地VSCode中连接远程服务器或虚拟机,享受本地开发的便利性,同时使用远程服务器的计算资源。

本教程将详细介绍如何在Windows系统上配置SSH密钥,并通过VSCode连接Ubuntu或Arch Linux虚拟机。

准备工作

在开始之前,请确保您已完成以下准备工作:

  1. 在本地Windows系统上安装了Visual Studio Code
  2. 拥有一台可访问的Linux虚拟机(Ubuntu或Arch Linux)
  3. 确保本地Windows系统与虚拟机网络互通

在Linux虚拟机上配置SSH服务

要使用VSCode远程连接虚拟机,首先需要在虚拟机上配置并启动SSH服务。

Ubuntu系统配置SSH服务

Ubuntu是最受欢迎的Linux发行版之一,特别适合初学者。它基于Debian,提供了用户友好的界面和强大的社区支持。

在Ubuntu上安装和启动SSH服务:

  1. 更新软件包列表:

    1
    sudo apt update
  2. 安装OpenSSH服务器软件包:

    1
    sudo apt install openssh-server
  3. 启动SSH服务:

    1
    sudo systemctl start ssh
  4. 设置SSH开机自启:

    1
    sudo systemctl enable ssh
  5. 检查SSH服务状态:

    1
    sudo systemctl status ssh
  6. 配置防火墙允许SSH连接(如果启用了UFW):

    1
    sudo ufw allow ssh

Arch Linux系统配置SSH服务

Arch Linux是一个轻量级且灵活的Linux发行版,采用滚动更新模式。它专为希望完全控制系统的技术用户而设计。

在Arch Linux上安装和启动SSH服务:

  1. 更新系统:

    1
    sudo pacman -Syu
  2. 安装OpenSSH软件包:

    1
    sudo pacman -S openssh
  3. 启动SSH服务:

    1
    sudo systemctl start sshd
  4. 设置SSH开机自启:

    1
    sudo systemctl enable sshd
  5. 检查SSH服务状态:

    1
    sudo systemctl status sshd
  6. 配置防火墙允许SSH连接(如果使用ufw):

    1
    sudo ufw allow ssh

在Windows上生成SSH密钥

现在,我们在Windows电脑上创建一对全新的SSH密钥(公钥和私钥)用于免密登录。

  1. 打开命令提示符(CMD)或者 PowerShell。

  2. 运行ssh-keygen命令来生成密钥。推荐使用ed25519算法,因为它更安全、更高效:

    1
    ssh-keygen -t ed25519 -C "your_email@example.com"
    • 您可以将引号中的内容替换成您的邮箱,方便识别密钥。
    • 当提示 “Enter file in which to save the key…” 时,直接按回车,密钥将保存在默认位置。
    • 当提示 “Enter passphrase…” 时,为了实现完全的免密登录,请不要输入任何内容,直接按回车键

执行完毕后,在 %USERPROFILE%\.ssh 目录下会生成两个新文件:id_ed25519(私钥)和 id_ed25519.pub(公钥)。

配置SSH免密登录

方法一:使用命令自动复制公钥(推荐)

这是实现免密登录的最简单方法。Windows虽然没有ssh-copy-id命令,但我们可以通过一条命令完成同样的工作。

  1. 打开PowerShell(推荐使用PowerShell,功能更强大)

  2. 执行以下命令,将公钥内容复制到虚拟机的authorized_keys文件中:

    1
    type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh username@your_vm_ip_address "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
    • 请务必将 username 替换成您在虚拟机上的用户名
    • your_vm_ip_address 替换成您虚拟机的IP地址
    • 执行该命令后,系统会提示您输入一次虚拟机的登录密码,这是为了验证身份并完成公钥的复制

方法二:手动复制公钥

如果自动复制方法不工作,可以手动复制公钥:

  1. 在Windows上显示公钥内容并复制:

    1
    cat $env:USERPROFILE\.ssh\id_ed25519.pub
  2. 在Linux虚拟机上创建SSH目录并粘贴公钥:

    1
    2
    3
    4
    5
    # 创建.ssh目录(如果不存在)
    mkdir -p ~/.ssh

    # 将复制的公钥内容粘贴到authorized_keys文件中
    echo "在这里粘贴从Windows复制的公钥内容" > ~/.ssh/authorized_keys

配置SSH服务权限

SSH对安全性要求极高,如果目录或文件权限不正确,会直接拒绝读取密钥。

在Linux虚拟机终端中,执行以下命令设置正确的权限:

1
2
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
  • 700 权限意味着只有您自己(用户)可以读、写和执行这个目录
  • 600 权限意味着只有您自己可以读、写这个文件

配置SSH服务器选项

确认SSH服务器是否允许公钥认证:

  1. 在Linux虚拟机中,使用文本编辑器打开SSH服务器配置文件:

    1
    sudo nano /etc/ssh/sshd_config
  2. 确保以下配置项设置正确(取消注释并设置为如下值):

    1
    2
    3
    - `PubkeyAuthentication yes`:确保允许公钥认证
    - `AuthorizedKeysFile .ssh/authorized_keys`:指定授权密钥文件位置
    - `PasswordAuthentication yes`:**暂时**开启密码登录,这样即使公钥有问题,我们也能通过正确的密码登录来修复。等我们用密钥免密登录成功后,再把它改回 `no` 以增强安全性(不改也没问题)
  3. 保存修改后重启SSH服务使配置生效:

    1
    2
    sudo systemctl restart sshd  # Ubuntu
    sudo systemctl restart sshd # Arch Linux

安装和配置VSCode Remote-SSH扩展

安装必要的扩展

  1. 打开VSCode
  2. 进入扩展面板(Ctrl+Shift+X)
  3. 搜索并安装以下扩展:
    • Remote - SSH
    • Remote - SSH: Editing Configuration Files

VSCode扩展安装
Remote-SSH扩展
Remote-SSH配置文件扩展

配置SSH连接

  1. Ctrl+Shift+P 打开命令面板
  2. 输入 “Remote-SSH: Connect to Host…” 并选择
  3. 选择 “Add New SSH Host…”
  4. 输入SSH连接命令:
    1
    ssh username@ip_address
    username 替换为虚拟机用户名,ip_address 替换为虚拟机IP地址

添加SSH主机

  1. 选择SSH配置文件位置(通常选择第一个选项即可)

选择配置文件

连接到虚拟机

  1. 再次按 Ctrl+Shift+P 打开命令面板
  2. 输入 “Remote-SSH: Connect to Host…” 并选择
  3. 从列表中选择刚才配置的主机
  4. 如果一切配置正确,VSCode将直接连接到虚拟机,无需输入密码

故障排除

如果连接失败,请按以下步骤排查:

  1. 在PowerShell中测试SSH连接:

    1
    ssh username@ip_address

    如果提示输入密码,则说明SSH密钥认证未正确配置。

  2. 检查虚拟机上的SSH服务状态:

    1
    2
    sudo systemctl status ssh   # Ubuntu
    sudo systemctl status sshd # Arch Linux
  3. 检查SSH配置文件中的关键设置:

    1
    2
    3
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    PasswordAuthentication yes
  4. 确认文件权限设置正确:

    1
    2
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

总结

通过以上步骤,您应该能够成功使用VSCode连接到Linux虚拟机进行远程开发。这种方法不仅适用于虚拟机,同样适用于远程服务器。SSH密钥认证提供了安全且便捷的连接方式,避免了每次都需要输入密码的麻烦。

配置成功后,您就可以在本地VSCode中直接编辑远程服务器或虚拟机上的文件,享受与本地开发几乎一致的体验,同时利用远程服务器的性能优势。