有同学在问如何通过Windows中的VS Code连接VMware虚拟机中的Ubuntu。要实现这点,要通过SSH连接。

这里分享一下我的安装配置经验。如有谬误,敬请指正。

一、Ubuntu设置

一) 设置固定IP地址

一般地,虚拟机中UbuntuIP地址是通过DHCP方式动态分配的,因此每次启动后地址可能不一样。为此,必须为虚拟机设置一个固定的IP地址。

  1. 点击Ubuntu桌面右上角的网络图标,在下拉菜单中选择设置或者Settings

  2. 在弹出的窗口中,在左侧栏顶部选择网络或者Network。出现的窗口类似于:

  3. 点击Wired项目中右侧的齿轮,进入设置页面:

    请记住这个页面中的Default RouteDNS

  4. 点击IPv4选项卡,在其中选择Manual,然后:
    • Addresses中输入你想要的IP地址、子网掩码和网关地址。这里的网关地址输入刚才记下来的Default Route的地址。
    • DNS中,关闭Automatic,输入刚才记下来的DNS的地址。

  5. 点击右上角的Apply以生效。
  6. Ubuntu终端中,发出如下命令重启系统:
     reboot
    
  7. 重启后,如果桌面右上角的网络图标上显示?,则说明网络不通。请检查前面的步骤是否操作正确。

二) 启动SSH服务

在终端中发出如下命令:

sudo service ssh start

如果提示命令不存在,则先安装它:

sudo apt install openssh-server

安装好后启动服务。

二、 Windows设置

一) 为SSH连接做准备

  1. 生成ssh key

    打开Powershell,发出如下命令:

     ssh -V
    

    如果显示出版本信息,说明你的Windows系统已经安装了ssh客户端。此时可以运行ssh-keygen命令。

    如果没有,那么请用管理员身份启动Powershell,用如下命令安装:

     Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
    

    再发出如下命令:

     cd ~/.ssh
     ssh-keygen -t rsa -C "your-email"
    

    your-email是你常用的邮箱地址。

    此命令会提示你,生成的ssh key存放到哪个文件中。可以直接回车,选择默认文件名rsa_id,或者输入你想要的文件名。例如,我输入了ubuntu

    此后都以我的操作为例。

    此后的提问一路回车就可以了。

    完成后,~/.ssh目录中会生成两个文件:

    • ubuntu:私钥文件
    • ubuntu.pub:公钥文件
  2. 创建config文件

    打开Code,新建文件,在其中输入:

     Host ubuntu
         HostName 192.168.184.129
         User bzj
         IdentityFile ~/.ssh/ubuntu
    
    • Host:任意你想要的名字
    • HostName:刚为Ubuntu设置的固定IP
    • User:你登录Ubuntu的账号
    • IdentityFile:刚生成的ssh key的私钥文件名ubuntu

    将文件保存到~/.ssh目录中,并命名为config

  3. 复制公钥文件到Ubuntu以实现免密登录

    • 进入Ubuntu桌面,双击Home图标,点击菜单栏上的三条横线图标,勾选Show Hidden Files,此后你会在文件夹里看到.ssh目录。双击打开它。
    • Windows中,打开C:\用户\<登录名>\.ssh文件夹,将ubuntu.pub文件复制粘贴到Ubuntu.ssh目录中,并将其重命名为:authorized_keys

      <登录名>是你的Windows登录账号名。
    • Ubuntu终端中,发出如下命令:
        cd ~/.ssh
        chmod 644 authorized_keys
      

二) 测试SSH连接

Powershell终端中,输入:

ssh -T ubuntu

如果操作无误,那么就可以看到类似于如下信息:

Welcome to Ubuntu 21.10 (GNU/Linux 5.13.0-30-generic x86_64)

//some information

0 updates can be applied immediately.

此时,光标在闪动。这说明已经远程进入了Ubunut系统。试试如下命令:

ls -l

你应该会看到你的Ubuntu登录账号下的目录列表。 输入:

exit

将退出连接。

三、用Code连接虚拟机中的Ubuntu

  1. 打开Code,点击远程连接图标,在REMOTE EXPLOERER的列表中,选择SSH Targets
  2. 此后,下方列表将会出现config文件中的配置项:ubuntu
  3. 点击ubuntu,根据系统的提示连接上虚拟机中的某个目录。

你可能需要先在虚拟机中创建要连接的目录。