「VS Code」如何通过跳板机连接服务器进行远程开发:Remote-SSH 篇

「VS Code」 Remote Development using SSH (with a jump server to go through)

日志

  1. 「2019-06-07」自 v1.35 起,VSC 稳定版中能够使用 Remote Development (Preview) 插件了;
  2. 「2019-05-19」提交了全文初版。

作者按:近期,Visual Studio Code 中提供了一个很有趣的插件:Remote Development 。使用这个插件之后,我们就可以直接使用 VSC 开发部署在远程机器、容器甚至 WSL 上的项目,并充分享受 VSC 的强大特性,使得我们可以摆脱传统的 XManager 套件。然而在使用这个插件的时候,可能会面临需要经过跳板机的场景,那么在这种情况下,我们该怎么成功使用 Remote Development 呢?

简介

2019 年 05 月 02 日,Visual Studio Code(以下简称 VSC)公布了 Remote Development 插件的预览版(公告传送门)。只要下载 VSC v1.34 insider(日志传送门),也即四月份发布的内测版,就可以使用这个插件了。

通过这个插件,我们可以直接在 VSC 中打开服务器上的文件夹。不论这个服务器是一个真实的远程机,还是一个虚拟机,甚至只是一个容器,只要这个它上面能运行 SSH server 就行。这意味着传统的远程开发方法可以丢进角落了。

传统而言,如果我们要进行远程开发,我们往往会同时运行如下软件。不觉得这个方案麻烦的人一定是组了多屏。

  • XShell:打开服务器的终端;
  • XFtp 或 lrzsz 或 Git:同服务器传输文件;
  • VSC:使用最舒服的编辑器写 BUG。

而现在,我们只需运行一个 VSC 就行了。

VSC 通过 Remote Development 插件连接上远程服务器,然后打开服务器上的文件夹作为 workspace。无需将服务器上的各种头文件和源码拷贝到本地上,我们就能使用包括 IntelliSense (completions)、code navigation 及 debugging 在内的各种功能。最后,我们还能使用编辑器内置的终端操纵服务器,去做一些 build、release 这样的事情。

单纯的使用运行 Remote Development 插件并不是什么很复杂的事情。实际上这个插件已经设计得足够优雅了。麻烦的事情在于出于各种需求,我们可能会希望先连接到一个跳板机上,再连接到我们的服务器。而 windows 平台的 openssh 套件中并不包含原生的适用于 ProxyCommand 的工具,使得传统适用于 linux 平台的教程并不能 work。

本文即针对这种场景,提出一整套 plug-and-play 的解决方案。

S1. 准备好你的本地机器

注意: 教程所基于的本地机器windows10 1809

  1. 安装适用于 Windows 10 的 OpenSSH,这里给出两种等价的方案:

    • 使用 PowerShell 安装 OpenSSH:
      • 使用快捷键 Windows + X,接着按 A 或点选「Windows PoweShell(管理员)」。分别输入:
        • Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

          这是为了检查 OpenSSH 客户端及服务端是否安装,当均为安装时应打印:

          Name  : OpenSSH.Client~~~~0.0.1.0
          State : NotPresent
          Name  : OpenSSH.Server~~~~0.0.1.0
          State : NotPresent
          
        • Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

          这是为了安装 ssh 客户端,安装成功时应打印:

          Path          :
          Online        : True
          RestartNeeded : False
          

          通过网络获取,而微软的网络服务质量大家是有目共睹的,所以这里为自己祈祷吧!

          在这里插入图片描述

    • 从设置在 Windows 10 1809 UI 安装 OpenSSH;
      • 按下 win 键,点选设置,点选应用,点选管理可选功能,点选添加功能,点选 OpenSSH 客户端。

        在这里插入图片描述

  2. 安装 Visual Studio Code (传送门);

  3. 在插件市场中检索并安装 Remote SSH

    注意:安装 Remote Development 会自动安装 Remote - Container, Remote - SSH 及 Remote - WSL 全家桶。这里我们只需要 Remote-SSH。

    在这里插入图片描述

  4. 生成 SSH Key

    1. 进入 PowerShell;

    2. 输入 ssh-keygen -t rsa -b 4096

      按理说,按照上述步骤安装 ssh client 时会顺便安装 ssh-keygen

    3. 在「资源管理器」(快捷键 Windows + E )中的目录栏输入 %USERPROFILE%\.ssh\,进入保存公私钥的目录,其中:

      • id_rsa:私钥,本地机器持有
      • id_rsa.pub:公钥,后面需要改名后上传到服务器上去

    注意: 也有教程(传送门)称无需该步,但实测发现这样进入后几乎每次操作都需要输入密码,操作起来十分繁琐。因此这里采用 VSC 要求的公私钥对称加密技术。

S2. 准备好你的远程机器

注意: 教程所基于的远程机器Ubuntu 18.04

将「本地机器」上的公钥保存在「远程机器」的合适位置处,这里就各凭手段了,如果你:

  • 无需跳板就能 ssh 到远程机器,那么你只需在 CMD 里执行下述命令就好了,注意修改远程机器的名称:

    SET REMOTEHOST=your-user-name-on-host@host-fqdn-or-ip-goes-here
    
    scp %USERPROFILE%\.ssh\id_rsa.pub %REMOTEHOST%:~/tmp.pub
    ssh %REMOTEHOST% "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat ~/tmp.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && rm -f ~/tmp.pub"
    
  • 反之,你需要手动完成这样的工作:

    1. 进入 ~/.ssh 目录,将「本地机器」上的 id_rsa.pub 拷贝进去并更名为 authorized_keys
    2. ~/.ssh 的权限设置为 700,将 ~/.ssh/authorized_keys 的权限设置为 600

      注意: 在传输文件的时候 XFtp 或 lrzsz 都是不错的选择,这里以 lrzsz 为例:在 XShell 中依次输入:

      sudo apt install lrzsz                        # 安装 lrzsz
      rz                                            # 调用资管管理器,自行上传公钥(c/用户/用户名/.ssh/.id_rsa.pub)
      mkdir -p ~/.ssh                               # 创建目录 ~/.ssh
      chmod 700 ~/.ssh                              # 修改目录权限
      cat id_rsa.pub >> ~/.ssh/authorized_keys      # 将公钥拷贝到  ~/.ssh 并命名为 authorized_keys
      chmod 600 ~/.ssh/authorized_keys              # 修改公钥副本的权限
      rm -f id_rsa.pub                              # 删除刚才上传的公钥
      

注意:当有多台本地机器都要连接远程机器怎么办?只用将本地机器的公钥 append 到 authorized_keys 中就行。

注意:当远程机器重置了,比如重新安装系统,需要将 %USERPROFILE%\.ssh\ 中的 known_hosts 删除,以重建连接。

S3. 开始远程连接

对了,想起来 Ubuntu 不会自带 openssh-server,虽然能看到这篇博客的人肯定不至于机器里连 sshserver 都没有装。如果要安装的话需要输入 sudo apt install openssh-server

下面就开始编辑远程连接的配置文件了。

  1. 点击界面最左边的 Remote-SSH;

  2. 点击左上方 CONNECTION 窗口中的蓝字 Configure,并选择包含 .ssh\config 的配置文件;

    在这里插入图片描述

  3. 如下所示填入配置

    Host bd07
      # 这里填入要在远程主机上登录的用户名
      User maokelong
      # 这里填入远程主机 IP
      HostName 192.168.x.xxx
      # 这里填入远程主机 ssh 端口
      Port 22
      # 这里填你私钥的路径
      IdentityFile c:\Users\mkl\.ssh\id_rsa
      # 当需要跳板机的时候就要填这个了
      # 这里代理类型根据需求填 socks4、socks5 或 http
      # 这里 xxx.xxx.xxx.xxx:xxx 表示跳板机 IP:端口
      # 这里 %h %p 无需修改,将自动分别读取 HostName 和 Port 的配置并填入
      ProxyCommand C:\bin\nmap-7.70\ncat.exe --proxy-type http --proxy xxx.xxx.xxx.xxx:xxx %h %p
    

    注意: Windows 10 的 openSSH 里没有自带的用于支持 ProxyCommand 的工具,所以我们需要额外下载 ncat.exe 或 connect.exe。由于笔者在尝试 connect.exe 的时候遇到了无从解决的错误,所以这里仅介绍了 ncat.exe 的使用方式。这里假设你下载了(传送门)并解压到了 c:\bin。所以你可以通过 C:\bin\nmap-7.70\ncat.exe 找到 ncat.exe。

配置文件编辑完就终于可以连接咱们的远程机器啦!

在这里插入图片描述

S4. Enjoy Yourself

Happy coding!

注意!如果你通过跳板机连接的远程机器,那么在成功连接后 VSC 可能会启动一个名称包含「ncat.exe」的 纯黑框。这可能是一个 BUG,和 VSC 无法在内置终端中运行这个命令有关。我们该怎么把它消除呢?在设置里开启「remote.SSH.showLoginTerminal」设置就好了。

在这里插入图片描述

许愿:愿我早日得到甜甜的爱情!

  • 19
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
### 回答1: VS Code 是一款优秀的跨平台集成开发环境,支持通过插件实现远程连接服务器的功能。在连接远程 Ubuntu 服务器时,可以使用 Remote-SSH 插件来解决连接问题。 首先,在本地的 VS Code 中安装并启用 Remote-SSH 插件,然后点击插件栏的图标,选择 "Connect to Host..." 选项。在弹出的列表中选择 "Add New SSH Host",然后输入远程服务器的地址和登录凭据(用户名和密码或者密钥)。 连接问题的解决主要涉及以下几个方面: 1. 配置远程服务器的 SSH 服务:确保远程服务器上的 SSH 服务已经正确安装和配置,可以使用命令 `sudo apt install openssh-server` 来安装。如果已经安装则可以通过 `sudo service ssh status` 来检查 SSH 服务的状态。 2. 配置防火墙规则:如果你的远程服务器开启了防火墙,需确保 22 端口(SSH 默认端口)已经放行,可以通过添加防火墙规则或调整已有规则来实现,具体方法可以参考相关的防火墙软件文档。 3. 配置用户访问权限:确保登录的用户具有远程访问服务器的权限。可以通过修改 `/etc/ssh/sshd_config` 文件,将 `PermitRootLogin` 的值设置为 `yes`,并重启 SSH 服务来允许使用 root 用户登录,或者通过 `sudo usermod -aG sudo <username>` 将用户添加到 sudo 组来获得相应的权限。记得通过 `sudo service ssh restart` 来重启 SSH 服务。 连接成功后,可以使用 VS Code远程服务器上进行编辑、编译和调试等开发工作,享受本地开发环境的便利。同时,通过配置 SSH 的端口转发功能,还可以实现本地和远程服务器之间的文件传输和端口转发等功能,让开发工作更加灵活高效。 ### 回答2: 使用VSCode连接远程Ubuntu服务器,并使用Remote-SSH插件来做到这一点是相对简单的。以下是连接问题解决的步骤: 第一步是在VSCode中安装Remote-SSH插件。在扩展市场中搜索“remote-ssh”,然后点击安装。 安装完插件后,点击VSCode左侧的远程部分,再点击“SSH: Connect to Host”选项。这将弹出一个远程主机列表,如果是第一次使用,列表将是空的。在列表底部有一个“Add New SSH Host”选项,点击它。 接下来是配置远程主机的步骤。在弹出的输入框中输入远程主机的名称(任意),然后输入主机的SSH地址。例如,如果远程主机的IP地址是192.168.1.1,则输入该地址。 然后,VSCode将要求输入远程主机的用户名。输入正确的用户名并按下Enter键。 接下来,VSCode将要求你输入远程主机的密码。在密码字段中输入正确的密码,并按下Enter键。 如果一切顺利,VSCode连接远程主机,并将其添加到远程主机列表中。你可以在远程部分看到远程主机的名称。如果点击远程主机名称,则VSCode将打开一个新的窗口,显示远程主机的文件系统。 如果连接失败,首先要检查主机的SSH配置是否正确。确保远程主机正在运行SSH服务器,并且端口号和用户名以及密码都是正确的。可以使用终端或其他SSH客户端测试连接。 如果仍然无法连接,可以尝试检查本地网络设置,确保网络连接正常,可以正常访问远程主机。另外,也可以尝试更新VSCodeRemote-SSH插件到最新版本,以确保没有已知的问题。 总之,通过使用Remote-SSH插件,VSCode可以轻松地连接远程Ubuntu服务器。遵循上述步骤,对配置正确的远程主机进行连接时,通常不会遇到问题。
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值