一下午终于配好:如何用vs code连接远程主机jupyter server(notebook/lab)
因为教研室的机器有2060,笔记本只有集成显卡,虽然也可用浏览器访问,但是vs code不论从界面还是扩展功能来说,都有更好的编程体验,所以想通过vs code远程连接jupyter server。
要实现该需求总体需要三个步骤:
- 远程主机安装ssh server
- 本地主机安装vs code并安装jupyter、Remote-ssh扩展
- 配置jupyter
安装远程主机ssh服务
SSH分为客户端openssh-client和服务端openssh-server
如果你只是想登陆别的机器的SSH只需要安装openssh-client,如果要使本机开放SSH服务就需要安装openssh-server。
ubuntu有默认安装openssh-client(笔者的ubuntu版本为Ubuntu 20.04.4 LTS),如果没有则执行:
sudo apt-get install openssh-client
可通过cat /etc/issue命令查看linux发行版版本信息,cat /proc/version命令查看操作系统版本信息。
安装服务端
sudo apt-get install openssh-server
安装完成后,确认ssh server是否启动了:
ps -e|grep ssh
或者执行netstat -tlp命令。
如果没有启动,可执行:
sudo /etc/init.d/ssh start
至此,ssh server就安装好啦!
配置ssh
如果还有一些特殊的需求可以通过修改位于/etc/ssh/sshd_config的ssh server配置文件自定义。
首先,备份一下原始配置文件并修改权限,方便之后修改配置:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original
sudo chmod 777 /etc/ssh/sshd_config
使用vim编辑配置文件:
vim /etc/ssh/sshd_config
常用的有:
- 修改端口号,取消掉Port的注释并自定义,避免端口扫描。
- 找到#PermitRootLogin yes,去掉注释,修改为no。(笔者没有修改,因为是root登录)
安装并配置vs code
vs code官网下载链接:Download Visual Studio Code - Mac, Linux, Windows
之后再vs code中的extension marketplace下载扩展。
安装Remote Explorer(本地主机)
安装Remote SSH扩展(本地主机)
用于连接远程主机。
下载好之后,点击左侧Remote Explorer,点击加号,添加新的远程连接:
输入格式为:ssh 用户名@主机ip -端口号。
例如,笔者连接的远程主机的22端口:ssh root@11.22.33.44 -22
连接成功后会看到如下效果:
此时就可以在Explorer中访问远程主机的文件夹:
安装jupyter扩展(远程主机)
安装成功后可以在Extensions中看到远程主机的扩展,搜索jupyter,在远程主机安装jupyter:
此时,所有需要的环境全部安装完毕,之后需要配置jupyter以及注意几个小坑就可以成功完成。
配置并连接远程主机的jupyter server
配置jupyter server
在用户文件夹的.jupyter文件夹中(~/.jupyter)包含jupyter配置文件:jupyter_notebook_config.py。vim jupyter_notebook_config.py:
c.ServerApp.root_dir='自定义notebook工作目录'
c.ServerApp.ip='*' #notebook监听所有ip地址
# 重要配置!!!
c.ServerApp.allow_remote_access = True #允许远程访问服务
c.ServerApp.allow_root = True #允许在root用户下运行(之前没开这个配置排查了很久)
c.NotebookApp.allow_origin = '*' #允许任意源访问
配置完成后,在远程主机运行jupyter notebook或jupyter lab。
连接jupyter server
在Explorer选择远程主机中的某个python文件,一次点击“Select Notebook Kernel ”->“Select Another Kernel"
最后输入Jupyter Server的地址:
例如11.22.33.44:8888/(token)。
这里注意笔者jupyter扩展的版本:
操作可能会不一样,笔者看到部分博客是输入Ctrl+Shift+P搜索Jupyter:Specify Jupyter Server for Connections命令,但是由于版本调整,笔者版本中没有该项配置。
详见No "Specify Jupyter Server for Connections" command · microsoft/vscode-jupyter · Discussion #13145 · GitHub
最后,检查下工作目录,有可能会有导入包时的路径的小问题,可通过以下命令修改:
# 修改当前工作目录
import os
os.chdir(os.getcwd()+'/当前工作目录')
不出意外,到现在应该已经可以用vs code连接远程主机并使用远程主机的jupyter server运行代码了。
Have Fun!!
由于本人能力相当有限,如果有任何问题或者建议,都非常非常欢迎各位兄弟评论和私信!!
写作是一种输出,交流也是一种输出,都是进步最快的方式,相互交流,共同进步!!
参考
- Ubuntu环境下SSH的安装及使用-CSDN博客
- Manage Jupyter Kernels in Visual Studio Code
- No "Specify Jupyter Server for Connections" command · microsoft/vscode-jupyter · Discussion #13145 · GitHub
- Security in the Jupyter notebook server