【Jupyter Remote Server远程配置】远程连接Linux服务器上的Jupyter Lab,并在本地浏览器访问

本文介绍远程连接服务器上的Jupyter Lab,并在本地浏览器访问。一些快捷操作,以及常见问题解决方案。

  1. Install Anaconda/Miniconda, (Optional) Create a Conda environment.
    Install Jupyter Lab: https://jupyter.org/install
    conda install -c conda-forge jupyterlab
    接下来参照Jupyter官方文档,这里提供关键步骤的简略描述。先写jupyter notebook的配置方法,按这个配置的话lab也可以打开(把url后面加一个/lab就行):
  2. 创建config文档。
    jupyter notebook --generate-config
  3. 创建登录密码,这个会在远程浏览器打开jupyter lab的时候输入来登录。记住下面这个存密码的地址。
    jupyter notebook password
    【Jupyter Remote Server远程配置】远程连接Linux服务器上的Jupyter Lab,并在本地浏览器访问_第1张图片
  4. (Optional) 创建安全证书,保障通信的安全性。
    如果想用https安全访问,则需要配置证书。最简单的做法是自行创建一个证书,但大多浏览器(如chrome, edge)会认为该没有认证的证书不安全,因此不建议访问(报错: The connection is not private)。除了Safari会提示不安全但可以选择继续访问。如果完全不设置安全证书,那么直接在chrome用http访问也可以。
    (不建议)自行创建一个不被认证的安全证书:
    openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem
    (建议)所以如果需要用https安全访问建议使用Let’s Encrypt创建认证的安全证书,这里在官方文档也提到了。
  5. 配置刚刚创建的config文档。打开jupyter_notebook_config.py (一般在.jupyter/目录下)。修改以下内容。其中certfilekeyfile是刚刚创建的mykey.keymycert.pem的绝对路径,password存在前面第3步jupyter_notebook_config.json下。
    如果没有进行上一步配置安全证书,则不需要配置这里的前两行certfilekeyfile
# browser auto-opening
c.NotebookApp.certfile = u'/absolute/path/to/your/certificate/mycert.pem'
c.NotebookApp.keyfile = u'/absolute/path/to/your/certificate/mykey.key'
# Set ip to '*' to bind on all interfaces (ips) for the public server
c.NotebookApp.ip = '*'
c.NotebookApp.password = u'sha1:bcd259ccf...'
c.NotebookApp.open_browser = False

# It is a good idea to set a known, fixed port for server access
c.NotebookApp.port = XXXX
  1. 配置完这些,命令行输入 jupyter notebook启动jupyter,可以看到类似以下的信息表示启动成功。在这里插入图片描述
    Jupyter Lab的同学可以把上面命令里的notebook全部改成lab,config文件里NotebookApp对应的修改ServerApp的行就可以。
  2. SSH Tunneling: 将会把服务器上正在端口XXXX运行着的jupyter lab传送到你的本地机器的某指定端口YYYY。在本地机器terminal输入:
    ssh -NfL localhost:YYYY:localhost:XXXX remoteuser@remotehost
    然后就可以在本地browser访问localhost:YYYY使用jupyter lab了。(如果第4步创建了证书,则访问https://localhost:YYYY)第一次访问会要求输入密码,就是在第三步创建的那个。【Jupyter Remote Server远程配置】远程连接Linux服务器上的Jupyter Lab,并在本地浏览器访问_第2张图片

可以快乐本地敲代码啦!【Jupyter Remote Server远程配置】远程连接Linux服务器上的Jupyter Lab,并在本地浏览器访问_第3张图片

补充信息

  1. 关闭SSH tunneling:在本地terminal查找使用端口YYYY的进程PID:sudo netstat -lpn | grep :YYYY或者lsof -n -i4TCP:YYYY。找到PID后,kill
  2. SSH tunneling shortcut 1 (reference):配置本地ssh config file,一般在$~/.ssh/config路径。
Host jupyterlab # 任意label名
	HostName remotehost
	User remoteuser
	LocalForward YYYY localhost:XXXX

配置好后就可以通过ssh -Nf jupyterlab 命令进行ssh tunneling了。

  1. SSH tunneling shortcut 2 (reference) :
    服务器端:在服务器上编写一个bash script执行命令,打开或创建~/.bashrc文件:
function jpt(){
    # Fires-up a Jupyter notebook by supplying a specific port (on remote server!)
    jupyter notebook --no-browser --port=$1
}

修改.bashrc后记得source ~/.bashrc刷新一下。以后在服务器上bash执行jpt XXXX即可迅速开启jupyter lab。
建议:在服务器上可以用tmux命令运行jupyter,这样就可以保持jupyter server一直处于启动状态,以后使用只用在本地tunnel一下就可以了。
本地端:在本地机器上同样创建或打开~/.bashrc文件:

function jptt(){
    # Forwards port $1 into port $2 and listens to it (on local server!)
    ssh -NfL localhost:${2}:localhost:$1 remoteuser@remotehost
}

source刷新一下,然后本地bash执行:jptt XXXX YYYY即可。

  1. 切换lab和notebook:
    如果遇到打开localhost:YYYY是notebook但想换成lab的话,可以localhost:YYYY/lab。前提是已经正确安装了lab。

你可能感兴趣的:(python,Linux,jupyter,服务器,python,linux)