写在最前面(为了过审核):本文所提技术不需要访问任何国外的VPN,VPN不等同于翻墙,本文中提到的VPN指的是校园网

很多时候,我们会需要通过笔记本连服务器进行代码调试,但如果要从校外或是公司外连机房,有时会需要经过多次网络跳转,例如:你的PC -> 学校VPN -> 机房某网段跳板机 -> 远端目标机。在这种情况下,最简单的方法是用vim等终端工具进行编程,但现在的编程工具发展的如此迅速,尤其是vscode这类自定义程度很高的工具的出现,让我决定花一些时间思考如何让remote编程变得更愉快。经过几小时的试验,最终得到了一个我比较喜欢的方案,与大家分享。

首先展示一下最终效果:

远端服务器上的vscode的编程体验与local模式几乎一致,有个缺点是无法通过EXTENSIONS市场来一键安装插件(替代方案是利用VSIX,参考链接)。

需要用到的工具

  1. Windows系统的电脑,无论配置多低都ok,平板也ok,只要能运行MobaXterm就行,作为本地设备;
  2. MobaXterm,作为隧道工具(就是因为这个软件只支持windows系统所以才限定了OS,当然还有其他的tunnel方案可以绕开OS的限制,但比较繁琐,在这里就不铺开介绍了);
  3. Code-server,开源软件,远端部署,直接下载到远端目标机上,codeserver的下载链接。一般来说,如果远端是普通的Intel 64位芯片,就选择下载amd64版本的tar.gz。
  4. Tmux工具,在远端用yum(centos)或者apt-get(ubuntu)安装一下就行,主要是为了便于后台运行和管理。
  5. 浏览器,PC上一般都有。

具体步骤

  1. 远端目标机部署code-server。

    1. 解压codeserver;

      tar -zxvf ./code-server-3.8.0-linux-amd64.tar.gz
    2. 把code-server的bin路径添加到~/.bashrcPATH中,方便以后一键启动;
    3. 先运行一下bin里面的code-server,然后ctrl+C退出程序,此时会在你的用户目录里生成一个配置文件,路径是~/.config/code-server/config.yaml
    4. 配置config.yaml文件,修改bind-addr目标机IP:你想要的codeserver端口(要用实际的IP,别用localhost或者127.0.0.1),修改password成便于记忆的,用于后面登录验证;
    5. 在远端运行tmux,进入后运行code-server(如果没有添加到PATH里的话,就在对应bin目录下运行),成功的话会看到下方红框内的IP和端口已经变成了你设置的值;
    6. Detach tmux (ctrl+b d),退到外面来,接下来就没远端服务器什么事了。
  2. 在本地开启校园网VPN,连进校园网。我校用的是anyconnect,直接照常连上就行。
  3. 在MobaXterm上设置Tunnel,配置如下,端口号a可以自定义: ->  ->
  4. 打开浏览器,输入127.0.0.1:端口号a,如果成功的话会让你输入一开始设置的密码。
  5. 开始你的远端编程吧~ 只要有浏览器就行!

使用Tips

  1. 保持MobaXterm运行,tunneling别关别断;
  2. 如果server崩了,可以用MobaXterm以SSH的方式登录远端,attach上Tmux,重启一下code-server。
  3. 写代码时随手保存,避免网络问题导致代码丢失。

20210109更新

问题1:用久了terminal以及右边的滑动栏可能会花屏

把edge换成Chrome浏览器,会稳定很多。强烈建议用Chrome,可以避免很多小问题。浏览器F11进全屏模式有奇效,有双屏配合就更好了。

问题2:MobaXterm的Tunneling连上马上断开的问题

断开网页,关闭Tunnel,tmux关闭code-server。在目标机上用netstat -ano | grep PORT 查看端口占用情况,等待一会儿,等输出显示为空时,重启code-server,重连Tunnel,打开网页,即可。

改进1:现在不需要MobaXterm也可以建立Tunnel了

这个是因为我之前没想到可以直接在跳板机上设置端口转发。方法很简单:在跳板机上开一个tmux,然后用ncat建立转发即可。代码:

ncat --sh-exec "ncat 目标机IP 目标机端口" -l 跳板机端口 --keep-open

这样设置好后,直接不用mobaxterm,在浏览器中输入跳板机IP:跳板机端口,就可以直接连到目标机了,一步到位。

参考链接

code-server的公司官网:https://coder.com/

https://zhuanlan.zhihu.com/p/62570740

https://github.com/cdr/code-server/releases

https://github.com/cdr/code-server/blob/v3.8.0/doc/install.md

vscode远端编程 终极方案相关推荐

  1. 调用父级方法_通信:找到任意组件实例的findComponents系列方法,5个终极方案

    已经介绍了两种组件间通信的方法:provide / inject 和 dispatch / broadcast.它们有各自的使用场景和局限,比如前者多用于子组件获取父组件的状态,后者常用于父子组件间通 ...

  2. ubuntu 运行c++_06_Linux下VSCode简单编程(远程开发WSL_Ubuntu_18.04) | C语言入门

    06_Linux下VSCode简单编程(远程开发WSL_Ubuntu_18.04) 本系列主题 Linux下C语言彩色控制台编程实践_基于gcc,gdb,VSCode,git和WSL_Ubuntu_1 ...

  3. 反爬终极方案总结---字体反爬

    最近临时受命,要针对采集我司网站的爬虫进行反制.虽然不太熟悉这个领域,但既然分到咱这儿了,那就上呗,有啥说的,谁让咱是"全栈工程师"呢(牛逼吹的大了点). 原本公司已经有了一套字体 ...

  4. 单点登录终极方案之 CAS 应用及原理

    转载自  单点登录终极方案之 CAS 应用及原理 Cookie的单点登录的实现方式很简单,但是也问题颇多.例如:用户名密码不停传送,增加了被盗号的可能.另外,不能跨域! 1.基于Cookie的单点登录 ...

  5. STM32H743+CubeMX-双路FDCAN同时工作的终极方案(裸机)

    文章目录 一.前言 二.CubeMX 2.1.RCC 2.2.Clock Configuration 2.3.CORTEX_M7 2.4.DEBUG 2.5.FDCAN1 2.6.倒回去配置一个FDC ...

  6. STM32H743+CubeMX-两路FDCAN同时工作的终极方案(RTX5)

    文章目录 一.前言 二.CubeMX 2.1.Clock Configuration 2.2.FDCAN1 FDCAN2 三.代码 3.1.添加BSP fdcan.c 3.3.main.c 四.调试F ...

  7. 【干货】JS版汉字与拼音互转终极方案,附简单的JS拼音输入法

    转自:小茗同学的博客:小茗同学博客 网上关于JS实现汉字和拼音互转的文章很多,但是比较杂乱,都是互相抄来抄去,而且有的不支持多音字,有的不支持声调,有的字典文件太大,还比如有时候我仅仅是需要获取汉字拼 ...

  8. Android 跳转权限设置界面的终极方案

    转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10338377.html 有时候APP需要获取某些权限,要让用户手动打开,那么问题来了,若是直接提醒用户出 ...

  9. 微信公众号自动回复服务器数据,[终极方案]解决微信公众号服务器配置启用后无法自动回...

    在配置服务器配置时Token验证通过后,遇到给公众号发信息,提示:提示该公众号提供的服务出现故障,请稍后再试 的问题,一直实现不了自动回复的功能.百度了大量的资料,参考了开发文档,尝试了n种办法,检查 ...

  10. iOS开发中解决第三方静态库符号冲突的终极方案

    iOS开发中解决第三方静态库符号冲突的终极方案 背景 在iOS开发的时候,经常会使用各种第三方静态库,这些库内部可能会打包了相同的第三方库.那么在链接的时候就会发生符号冲突. 例如:A厂商提供的lib ...

最新文章

  1. vue 删除页面缓存_vue项目强制清除页面缓存的例子
  2. 用ul li实现边框重合并附带鼠标经过效果
  3. leetcode337. 打家劫舍 III(dfs)
  4. 使用pycharm配置flask项目,并使用git进行版本控制
  5. git 提交文件_GIT不小心提交了大文件导致提交失败怎么办?
  6. 判断回文数和求斐波拉序列
  7. 学习OpenVINO笔记之Inference Engine
  8. linux内网发现登录设备,LINUX 内网设备将服务映射到公网地址
  9. @程序员,夏天来了,你该送心仪女生这个啦
  10. 移动端-项目基础总结------彭记(020)
  11. 在VC++ 6.0下利用共享内存、消息实现内部进程通讯
  12. c#餐饮系统打印机_C#实现打印机功能
  13. php 图片木马,php图片木马实现原理
  14. DailyFi - 9.2 |Loot,黑纸白字?
  15. 2016/7/4日-你若安好,便是晴天.
  16. 面试官常问的设计模式及常用框架中设计模式的使用(一)
  17. 标准I/O和系统I/O的本质区别
  18. 【C语言】实现简单的计算器
  19. 一个“精神病”人的世界观
  20. 从topcoder赚钱的方法

热门文章

  1. win10系统下office2003和office2016兼容
  2. 使用lombok时,get/set方法冒红问题
  3. 在python中month函数的用法_Python代码中calendar.monthrange(year,month)函数其什么作用呢?...
  4. python3几种常见解压压缩包的方法
  5. python 小数点位数_python小数位数
  6. VMware虚拟机软件账号的注册问题
  7. 自定义自己的iphone铃声
  8. HAUT 1285: 军团再临【并查集*逆向思维】
  9. 第2章 物联网安全基础
  10. 卡内基梅隆计算机专业,卡内基梅隆大学计算机科学专业全面解析