VS Code通过插件实现服务器远程开发

重要:本文最后更新于,某些文章具有时效性,若有错误或失效,请在下方留言

最近由于要在实验室运行大量的代码,在自己电脑上运行肯定会拖累进展,于是发现在Visual Studio Code 中提供了一个很有趣的插件:Remote Development 。使用这个插件之后,可以直接使用 VS Code开发部署在远程机器、容器甚至 WSL 上的项目,并充分享受 VSC 的强大特性。本篇笔记主要记录记录环境的配置与安装。

简介

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

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

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

Step 1 :本地环境配置

使用 PowerShell 安装 OpenSSH

首先,在Win10左下角输入 powershell,右键选择「以管理员身份打开」,分别输入:

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</pre>

接下来运行以下代码安装SSH客户端:

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

安装成功时应打印:

Path          :
Online        : True
RestartNeeded : False

安装VS Code

传送门: https://code.visualstudio.com/Download

在插件市场中检索并安装 Remote Development

注意:安装 Remote Development 会自动安装 Remote - Container, Remote - SSH 及 Remote - WSL 全家桶。

生成 SSH Key

1. 首先进入PowerShell

2. 输入

ssh-keygen -t rsa -b 4096

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

3. 在「资源管理器」中的目录栏输入 %USERPROFILE%\.ssh\,进入保存公私钥的目录,其中:

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

Step 2 : 服务器配置

此处需要将「本地机器」上的公钥保存在「远程机器」的合适位置处。

  • 如果你无需跳板就能 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"
  • 反之,你需要手动完成这样的工作:
  • 进入 ~/.ssh 目录,将「本地机器」上的 id_rsa.pub 拷贝进去并更名为 authorized_keys
  • ~/.ssh 的权限设置为 700,将 ~/.ssh/authorized_keys 的权限设置为 600
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                              # 删除刚才上传的公钥

此处需要注意两点:

  1. 当有多台本地机器都要连接远程机器时,只用将本地机器的公钥 append 到 authorized_keys 中就行。
  2. 当远程机器重置了,比如重新安装系统,需要将 %USERPROFILE%\.ssh\ 中的 known_hosts 删除,以重建连接。

Step 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

配置完成即可远程连接服务器了!

如果刚才的信息填写有误想要更改的话,直接点这里:

Step 4 : Enjoy Coding

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

来源:孟繁阳的博客
本篇文章来源于孟繁阳的博客,如需转载,请注明出处,谢谢配合。
孟繁阳的博客 » VS Code通过插件实现服务器远程开发
Loading...

发表评论

表情
图片 链接 代码

12 评论

  1. 您好,我按照您的方法配置了。但是显示错误如下。能否帮忙看一下是什么原因?

    
    [12:22:14.287] remote-ssh@0.48.0
    [12:22:14.287] win32 x64
    [12:22:14.289] SSH Resolver called for "ssh-remote+我的开发机", attempt 1
    [12:22:14.289] SSH Resolver called for host: 我的开发机
    [12:22:14.289] Setting up SSH remote "我的开发机"
    [12:22:14.309] Using commit id "26076a4de974ead31f97692a0d32f90d735645c0" and quality "stable" for server
    [12:22:14.310] Testing ssh with ssh -V
    [12:22:14.377] ssh exited with code: 0
    [12:22:14.377] Got stderr from ssh: OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5
    [12:22:14.380] Running script with connection command: ssh -T -D 65365 我的开发机 bash
    [12:22:14.381] Install and start server if needed
    [12:22:14.384] Terminal shell path: C:\Windows\System32\cmd.exe
    [12:22:14.553] > 
    > 
    > ]0;C:\Windows\System32\cmd.exe
    [12:22:14.553] Got some output, clearing connection timeout
    [12:22:14.577] > 
    > 
    [12:22:14.980] > Ncat: Error reading proxy response header.
    > 
    [12:22:15.536] "install" terminal command done
    [12:22:15.536] Install terminal quit with output: Ncat: Error reading proxy response header.
    [12:22:15.536] Received install output: Ncat: Error reading proxy response header.
    [12:22:15.537] Stopped parsing output early. Remaining text: Ncat: Error reading proxy response header.
    [12:22:15.537] Failed to parse remote port from server output
    [12:22:15.537] Resolver error: 
    [12:22:15.540] ------
    
    1. @sw 好的,请稍等,我一会到了实验室后帮您看一下是为什么

    2. @sw https://github.com/microsoft/vscode-remote-release/issues/117
      我在这个链接里找到了可能解决你这个问题的例子,您试一下关闭本身电脑的代理软件直接连接一下,如果还是不行的话照着这个issue里面作者说的方法试着配置一下看看能否解决呢?
      这个问题我还真的没有遇到过,如果还是不能解决可以联系我

      1. @孟繁阳 谢谢你的回复!我按照最后一个回复的方法设置,依旧显示如下的错误。

        
        [14:12:42.857] remote-ssh@0.48.0
        [14:12:42.857] win32 x64
        [14:12:42.859] SSH Resolver called for "ssh-remote+开发机", attempt 1
        [14:12:42.860] SSH Resolver called for host: 开发机
        [14:12:42.860] Setting up SSH remote "开发机"
        [14:12:42.881] Using commit id "26076a4de974ead31f97692a0d32f90d735645c0" and quality "stable" for server
        [14:12:42.882] Testing ssh with ssh -V
        [14:12:43.089] ssh exited with code: 0
        [14:12:43.089] Got stderr from ssh: OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5
        [14:12:43.092] Running script with connection command: ssh -T -D 53372 开发机 bash
        [14:12:43.093] Install and start server if needed
        [14:12:43.096] Terminal shell path: C:\Windows\System32\cmd.exe
        [14:12:43.256] > 
        > 
        
        > ]0;C:\Windows\System32\cmd.exe
        [14:12:43.256] Got some output, clearing connection timeout
        [14:12:43.284] > 
        > 
        
        [14:12:43.331] > CreateProcessW failed error:87
        > 
        [14:12:43.379] > posix_spawn: Unknown error  
        > 过程试图写入的管道不存在。
        > 
        [14:12:43.983] "install" terminal command done
        [14:12:43.983] Install terminal quit with output: 过程试图写入的管道不存在。
        [14:12:43.983] Received install output: 过程试图写入的管道不存在。
        [14:12:43.984] Stopped parsing output early. Remaining text: 过程试图写入的管道不存在。
        [14:12:43.984] Failed to parse remote port from server output
        [14:12:43.984] Resolver error: 
        [14:12:43.988] ------
        
        1. @sw 我首先发现了这个issue和您的问题一样
          https://github.com/microsoft/vscode-remote-release/issues/1337

          官方给出了以下链接,需要调整您电脑上的相关文件权限
          https://code.visualstudio.com/docs/remote/troubleshooting#_local-ssh-file-and-folder-permissions

          如果这个还不行的话,请尝试将hostname调整为英文试试看,中文经常会出现问题。

          如果还不行,粘贴代码时请选择插入代码选项中的bash选项,这样更利于我检查~

          P.S.:请香港同胞保护好自己人身安全,大陆人民与你们同在!

        2. @sw 我也遇到这个问题,感觉是ssh版本的问题,后面切换成git自带的版本后正常了

  2. 看来用vs code人越来越多了 :wink:

    1. @何先生 真的是,VSCode现在我觉得甚至可以说完爆Visual Studio了~该有的功能都有,并且甚至github有人开源了code-server,这个部署在服务器上能实现网页版vscode,虽然目前code-server还是vscode 1.39,一直没到1.41

  3. @sw 可以删除本地的用户名下的配置内容,重新链接禁止就可以自动更新新的配置信息了

    1. @ulo 感谢建议!

  4. 请教一下哈,就是最后一步,我已经连接上服务器了,但是点终端上的+号启动终端无法启动,终端里一片空白,无法显示。前面的步骤中,show login terminal可以有终端(install)输入密码之类,输出完之后就输入不了东西了,点新建终端 终端一直在启动或者是一片空白。(本地是可以启动bash作为终端的)。。。不知道大神有遇到这个问题吗,困扰好久了....

    1. @明明很行 Remote Development 安装完第一次连接应该会让服务器那块下载一些必要文件,显示一片空白的原因我猜想的是服务器那端没联网,其实按理说不应该需要输入密码才对,我也是第一次遇到这种情况

孟繁阳的博客

博客首页 文章归档