環境情況
- 遠程服務器上配置了anaconda
- 本地主機沒有安裝anaconda(其實安不安裝都無所謂,有瀏覽器就行)
配置步驟如下
-
登錄遠程服務器
-
生成配置文件
jupyter notebook --generate-config
-
生成密碼
輸入
ipython
打開ipython生成密鑰:In [1]: from notebook.auth import passwd In [2]: passwd() Enter password: Verify password: Out[2]: 'sha1:ce23d945972f:34769685a7ccd3d08c84a18c63968a41f1140274' #這段是密鑰
把生成的密鑰'sha1:ce2…'復制下來后面用,password是遠程登錄時需要輸入的密碼,要記住。
-
修改配置文件
使用vim打開配置文件
vim ~/.jupyter/jupyter_notebook_config.py
修改如下地方:
c.NotebookApp.ip = '*' c.NotebookApp.password = u'sha:ce...剛才復制的那個密文' c.NotebookApp.open_browser = False c.NotebookApp.port = 8888 #隨便指定一個端口,但是要記住 c.NotebookApp.allow_remote_access = True c.NotebookApp.notebook_dir = u'目錄' #這個是根目錄,不想配置就不配置,默認是用戶家目錄
-
啟動jupyter notebook
正常啟動:
jupyter notebook
但是我們可能通常想要在后台啟動jupyter,然后關閉終端,在本地電腦上用瀏覽器訪問:
nohup jupyter notebook &
-
遠程訪問
在本地打開瀏覽器訪問
http://address_of_remote:8888
就可以訪問jupyter的登錄界面了,輸入密碼就可以正常登錄了。
意外情況
有些服務器可能只開放一個對外的端口,但是我們通過終端訪問服務器需要一個對外端口,開啟jupyter服務又需要一個端口,這樣就需要同時占用兩個端口才行。舉個栗子,服務器為了保證安全性只開放了一個對外的端口,22號端口,我們使用終端通過22號端口登錄到服務器上打開jupyter,jupyter創建的端口是8888號,但是服務器沒有對外開放8888號端口,所以即使打開了jupyter,外面也無法正常訪問。如果把jupyter的端口號改為22號,由於我們登錄終端的時候正在占用22號,所以jupyter就會提示端口已被占用,無法創建。網上有很多教程說可以通過修改防火牆設置來開放端口,修改防火牆設置一般都需要管理員權限,但是通常我們使用服務器的時候大多數情況下是不可能有管理員權限的,這時候我們可以使用端口映射來解決這個問題。
-
首先登錄終端打開jupyter,這時根據配置信息jupyter占用的是8888端口。
-
然后我們在本地上使用命令行輸入:
ssh -N -f -L localhost:9999:localhost:8888 -p 端口號 username@遠程地址
例如
ssh -N -f -L localhost:9999:localhost:8888 -p 22 yzr@202.48.29.23
這里說明一下:
locahost:9999
是指本地地址,localhost:8888
是指遠程地址,其中8888
是jupyter notebook中設置的端口號,-p 22
是指登錄服務器的端口號 后面是用戶名和服務器ip。 -
打開瀏覽器,輸入
localhost:9999
就可以看到jupyter notebook的登錄界面了。
這里原理上就是將服務器上的8888端口映射到本機的9999端口。