前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用VSCode进行远程炼丹

使用VSCode进行远程炼丹

作者头像
AI算法与图像处理
发布2019-11-29 12:57:35
1.5K0
发布2019-11-29 12:57:35
举报

作者:韩冰https://zhuanlan.zhihu.com/p/89662757 本文已由作者授权,未经允许,不得二次转载

本文分享一下我使用vscode作为我的炼丹炉的使用心得。在我们开发过程中,经常需要连接远程的服务器进行炼丹。通常情况下,我们会使用Pycharm的远程开发功能,同步服务器与本地的项目文件,使用远程解释器进行开发。但是使用过的同学都知道,重量级的Pycharm每次远程同步、加载远程解释器都需要相当长的时间。如果我们想要随时切换公司、学校、家里的各个场景,pycharm的同步、加载就成了一场噩梦。特别是当我们的python环境安装了很多依赖包,项目生成了大量文件的时候更是这样。直到vscode推出了Remote Development开发包,便完全解决了这个问题。让我可以在不同的场景快速切换,无需等待同步文件、环境。因为vscode远程开发完全是运行在服务器上的,我们本地的vsocde只是一个前端界面,所以根本无需同步服务器上的文件、解释器依赖库就可以体验到与本地开发完全相同的体验。自从使用了vscode的Remote Development功能,我便完全抛弃了Pycharm。

下载安装

官网下载vscode对应系统版本的安装包。

https://code.visualstudio.com/

安装远程开发插件

安装完成后,vscode左侧多出了一个菜单栏,我们点击配置按钮配置远程服务器的地址。

选择当前用户目录下的ssh配置文件进行配置

每个服务器需要配置ip,用户名,ssh端口等信息。配置完成后,点击连接到远程的按钮

按照提示输入登录密码后,如果左下角显示了服务器的名称,就说明连接成功了。

连接成功后,你便可以在远程服务器上安装各种插件

图示的图标说明插件已经在远程安装。此时你便可以打开远程的任何文件夹进行项目开发,所有的编辑修改,运行代码也都会在远程进行执行。体验过之后就会感觉超级方便。妈妈再也不用担心我同步文件,切换开发机了。同时,vscode还会非常贴心地为我们记录曾经打开过的文件夹,我们可以直接点击,连接服务器打开文件夹一步到位。

设置免密登录

上述配置完成后,还有一个小问题就是我们每次远程连接都要输入密码,很麻烦。所以这里我们设置一下ssh的免密登录。

在本地pc生成ssh公钥和私钥

代码语言:javascript
复制
 ssh-keygen -t rsa

这样会在当前目录生成名为id_rsa的私钥文件和名为id_rsa.pub的公钥文件,-t表示密钥类型是rsa。 如果你只输入ssh-keygen生成的RSA密钥长度为2048,如果你对安全性要求比较高可以指定4096位的长度:

代码语言:javascript
复制
ssh-keygen -b 4096 -t rsa

这里-b就是多少位,当你在生成SSHKEY的时候在命令行下会提示你Enter file in which to save the key,让你确认密钥文件保存的路径,一般回车即可(一般默认会在当前用户家目录下的.ssh目录下)。第二个提示是 Enter passphrase (empty for no passphrase) 让你输入一个密钥的密码,如果不输入则留空;回车生成公私钥完毕 。(这里建议密码留空)

手动上传公钥文件

将本地的公钥文件上传到服务器上,然后在服务器需要免密登录的用户家目录下查看是否有 ~/.ssh/authorized_keys 这个文件, 如果没有手动创建一个:

代码语言:javascript
复制
touch ~/.ssh/authorized_keys

然后我们将公钥内容写入到authorized_keys文件中,因为这个文件可能已经有内容了,所以你可以使用如下方式

代码语言:javascript
复制
cat -n ~/.ssh/rsa.pub ~/.ssh/authorized_keys
  1. 将.ssh目录的权限为700
  2. 将authorized_keys目录的权限为600
代码语言:javascript
复制
chmod 700 ~/.ssh/
chmode 600 ~/.ssh/authorized_keys

自动上传本地公钥

ssh-copy-id 复制公钥

这个工具还蛮有用的,不过它会将我本地的所有公钥都传到服务器,使用方法:

代码语言:javascript
复制
ssh-copy-id -p 22 username@remote-server

windows中没有ssh-copy-id可以使用以下命令代替

代码语言:javascript
复制
cat ~/.ssh/id_rsa.pub | ssh -p 22 username@remote-server "cat >> ~/.ssh/authorized_keys"

配置完成后,再次使用vscode远程连接服务器就不用再输入密码了。

使用autossh进行内网穿透

设想这样的场景,你在公司或者学校有一台用于炼丹的服务器,但是只能在内网访问。我在家里使用笔记本也想连接到远程的服务器中,这时我们应该怎么办呢。

答案是我们需要一台具有公网ip的服务器作为中继,使用autossh将公网服务器作为代理服务器。假设公网服务器为主机A,内网炼丹炉为主机B,我们的笔记本为C则

主机B上的操作

将主机B上的公钥拷贝到公网主机C实现B对C的免密登录(具体参考《ssh设置免密登录》),在主机B上执行autossh命令(可以在screen环境下执行)

代码语言:javascript
复制
screen -S reverse_proxy
autossh -M 5555 -NR 9999:127.0.0.1:22 -p 22 username@remote-server

-M是公网主机echo的地址,9999是公网服务器的转发端口,第一个22是B主机ssh端口,-p 后面是外网主机ssh端口,最后一个参数是公网主机远程登录地址。使用该命令时保证公网主机5555, 9999端口都是空闲状态。(这两个端口可以改成任意空闲端口)

主机A上操作

主机A此时可以直接通过ssh访问公网主机的9999端口访问到B主机的终端,具体操作为

代码语言:javascript
复制
ssh -p 9999 username@remote-server

验证登录成功后,我们在vscode中配置A服务器的ip,和转发端口后就可以连接我们的内网主机了。

功能展示

连接加载速度超快,与本地体验完全相同的远程调试。

无需配置,直接运行远程的jupyter notebook。而且jupyter notebook还支持自动补全和调试功能,比原生的notebook更加强大。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI算法与图像处理 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 下载安装
  • 设置免密登录
  • 使用autossh进行内网穿透
    • 主机B上的操作
      • 主机A上操作
      • 功能展示
      相关产品与服务
      远程调试
      远程调试(Remote Debugging,RD)在云端为用户提供上千台真实手机/定制机/模拟器设备,快速实现随时随地测试。运用云测技术对测试方式、操作体验进行了优化,具备多样性的测试能力,包括随时截图和记录调试日志,稳定的支持自动化测试, 设备灵活调度,用例高效执行, 快速定位产品功能和兼容性问题。云手机帮助应用、移动游戏快速发现和解决问题,节省百万硬件费用,加速敏捷研发流程。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档