作者:韩冰
链接:
转自:知乎
本文分享一下我使用vscode作为我的炼丹炉的使用心得。在我们开发过程中,经常需要连接远程的服务器进行炼丹。通常情况下,我们会使用Pycharm的远程开发功能,同步服务器与本地的项目文件,使用远程解释器进行开发。但是使用过的同学都知道,重量级的Pycharm每次远程同步、加载远程解释器都需要相当长的时间。如果我们想要随时切换公司、学校、家里的各个场景,pycharm的同步、加载就成了一场噩梦。特别是当我们的python环境安装了很多依赖包,项目生成了大量文件的时候更是这样。直到vscode推出了Remote Development开发包,便完全解决了这个问题。让我可以在不同的场景快速切换,无需等待同步文件、环境。因为vscode远程开发完全是运行在服务器上的,我们本地的vsocde只是一个前端界面,所以根本无需同步服务器上的文件、解释器依赖库就可以体验到与本地开发完全相同的体验。自从使用了vscode的Remote Development功能,我便完全抛弃了Pycharm。
目录
下载安装
官网下载vscode对应系统版本的安装包。
安装远程开发插件
安装完成后,vscode左侧多出了一个菜单栏,我们点击配置按钮配置远程服务器的地址。
选择当前用户目录下的ssh配置文件进行配置
每个服务器需要配置ip,用户名,ssh端口等信息。配置完成后,点击连接到远程的按钮
按照提示输入登录密码后,如果左下角显示了服务器的名称,就说明连接成功了。
连接成功后,你便可以在远程服务器上安装各种插件
图示的图标说明插件已经在远程安装。此时你便可以打开远程的任何文件夹进行项目开发,所有的编辑修改,运行代码也都会在远程进行执行。体验过之后就会感觉超级方便。妈妈再也不用担心我同步文件,切换开发机了。同时,vscode还会非常贴心地为我们记录曾经打开过的文件夹,我们可以直接点击,连接服务器打开文件夹一步到位。
设置免密登录
上述配置完成后,还有一个小问题就是我们每次远程连接都要输入密码,很麻烦。所以这里我们设置一下ssh的免密登录。
在本地pc生成ssh公钥和私钥
ssh-keygen -t rsa这样会在当前目录生成名为id_rsa的私钥文件和名为id_rsa.pub的公钥文件,-t表示密钥类型是rsa。如果你只输入ssh-keygen生成的RSA密钥长度为2048,如果你对安全性要求比较高可以指定4096位的长度:
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 这个文件,如果没有手动创建一个:
touch ~/.ssh/authorized_keys然后我们将公钥内容写入到authorized_keys文件中,因为这个文件可能已经有内容了,所以你可以使用如下方式
cat -n ~/.ssh/rsa.pub ~/.ssh/authorized_keys将.ssh目录的权限为700
将authorized_keys目录的权限为600
chmod 700 ~/.ssh/chmode 600 ~/.ssh/authorized_keys自动上传本地公钥
ssh-copy-id 复制公钥
这个工具还蛮有用的,不过它会将我本地的所有公钥都传到服务器,使用方法:
ssh-copy-id -p 22 username@remote-serverwindows中没有ssh-copy-id可以使用以下命令代替
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环境下执行)
screen -S reverse_proxyautossh -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主机的终端,具体操作为
ssh -p 9999 username@remote-server验证登录成功后,我们在vscode中配置A服务器的ip,和转发端口后就可以连接我们的内网主机了。
功能展示
连接加载速度超快,与本地体验完全相同的远程调试。
无需配置,直接运行远程的jupyter notebook。而且jupyter notebook还支持自动补全和调试功能,比原生的notebook更加强大。
推荐阅读
同样都是调参,为什么人家的神经网络比我牛逼100倍?
开源!TensorFlow 2.0中文开源书项目
谈谈我在PyTorch踩过的12坑
我们是一群哈工大和西湖大学的硕士博士,分享总结知识,欢迎关注[程序员大白],大家一起学习进步!