1. Running a notebook server
通過 notebook server 實現(xiàn)局域網(wǎng)內(nèi)對服務(wù)器中 Jupyter Notebook 的訪問與使用??梢灾苯訁⒄展俜轿臋n(英文):Running a notebook server。
1.1 創(chuàng)建 notebook 配置文件
檢查是否已存在 notebook 配置文件 jupyter_notebook_config.py,默認路徑為:
- Windows:
C:\Users\USERNAME\.jupyter\jupyter_notebook_config.py - OS X:
/Users/USERNAME/.jupyter/jupyter_notebook_config.py - Linux:
/home/USERNAME/.jupyter/jupyter_notebook_config.py
如不存在,則使用如下命令創(chuàng)建新的配置文件,系統(tǒng)會顯示剛創(chuàng)建文件的路徑:
$ jupyter notebook --generate-config
1.2 創(chuàng)建 notebook 登錄密碼
打開終端,進入 IPython / Python,使用 notebook.auth.security.passwd() 函數(shù)創(chuàng)建密鑰對:
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password: #輸入你想設(shè)置的密碼(此處不會顯式地在顯示器上顯示)
Verify password: #確認你想設(shè)置的密碼(此處不會顯式地在顯示器上顯示)
Out[2]: 'sha1:67c9e60bb8b6:9ffede************e042ea597d771089e11aed' #保存此串代碼
1.3 修改 notebook 配置文件
打開前文中新建或已存在的 notebook 配置文件 jupyter_notebook_config.py 并編輯:
# Set ip to '*' to bind on all interfaces (ips) for the public server
c.NotebookApp.ip = '*'
# 此處填寫前文中生成的密鑰
c.NotebookApp.password = u'sha1:bcd259ccf...<your hashed password here>'
# 關(guān)閉瀏覽器自動開啟
c.NotebookApp.open_browser = False
# 設(shè)置 notebook 訪問端口
c.NotebookApp.port = 2333
# matplotlib 設(shè)置(可選)
c.InteractiveShellApp.matplotlib = 'inline'
* 官方文檔 中有 SSL 設(shè)置部分,較為麻煩,建議跳過(或者設(shè)置后使用 https://your_ip:port 來訪問)。
1.4 局域網(wǎng)內(nèi)訪問
jupyter_notebook_config.py 為系統(tǒng)默認配置文件,無需指定,直接使用終端開啟 notebook 即可:
$ source activate your_env
$ jupyter notebook
終端中會彈出 notebook 的訪問路徑,通常為 your_ip:port 或 user_name-Ubuntu:port。打開服務(wù)器上瀏覽器(如有)可以直接訪問?;蛘咄ㄟ^局域網(wǎng)內(nèi)其他設(shè)備,打開瀏覽器,訪問 your_ip:port 進行局域網(wǎng)內(nèi)遠程訪問。
* 查詢本機 ip 可以使用 ifconfig -a 查看(第二行 inet 地址 后即為 ip)。
* 遠程文件傳輸可以使用 WinSCP 實現(xiàn),具體參照后文《使用 WinSCP 實現(xiàn)文件操作》。
2. SSH
SSH, secure shell,提供安全的遠程登錄。從事嵌入式開發(fā)搭建 Linux 開發(fā)環(huán)境中,SSH 的服務(wù)的安裝是其中必不可少的一步。SSH 方便一個開發(fā)小組中人員登錄一臺服務(wù)器,從事代碼的編寫、編譯、運行。方便代碼的共享及管理。SSH 是一種安全協(xié)議,主要用于給遠程登錄會話數(shù)據(jù)進行加密,保證數(shù)據(jù)傳輸?shù)陌踩?/p>
2.1 安裝 SSH
Ubuntu 默認只安裝了 SSH-Client 服務(wù),可以使用命令檢查是否安裝了 SSH-Server 服務(wù):
$ dpkg -l | grep ssh
安裝 SSH-Server:
$ sudo apt-get install openssh-server
檢查 SSH 是否啟動:
$ ps -e | grep ssh
如看到 sshd 則說明已啟動,否則手動開啟:
$ sudo /etc/init.d/ssh start
或者:
$ sudo service ssh start
SSH-Server 配置文件位于 /etc/ssh/sshd_config,在這里可以定義 SSH 的服務(wù)端口,默認端口是 22,可自定義成其他端口號。
2.2 設(shè)置開機自啟動
打開 etc/rc.local 文件(應(yīng)該需要管理員權(quán)限),添加如下內(nèi)容于 exit 0 之前:
etc/init.d/sshd start
或:
service sshd start
2.3 使用 Putty 局域網(wǎng)內(nèi)訪問

- Host Nme (or IP address) :填寫服務(wù)器 ip;
- Port:填寫訪問 SSH 端口,默認為 22;
- Saved Sessions:昵稱;

- Source port:為服務(wù)器中 notebook 配置文件所設(shè)置的端口,前文中設(shè)置為 2333。然后點擊 Add 添加到當(dāng)前配置;
- Destination:將服務(wù)器 2333 端口映射到本地的端口設(shè)置。
最后回到主界面,點擊 Save 保存配置,方便以后快捷訪問。
3. 使用 WinSCP 實現(xiàn)文件操作

- 主機名:填寫服務(wù)器 ip;
- 端口號:同 Putty;
- 用戶名/密碼:為服務(wù)器(Ubuntu 系統(tǒng))用戶名與密碼。
4. 使用 frp + 阿里云 實現(xiàn)內(nèi)網(wǎng)穿透
以上操作僅實現(xiàn)了在局域網(wǎng)內(nèi)子設(shè)備對服務(wù)器的訪問與文件操作,但脫離局域網(wǎng)后無法使用。因此,我們使用 frp 與阿里云服務(wù)器實現(xiàn)外網(wǎng)對內(nèi)網(wǎng)的訪問。類似的手段還有花生殼,但嘗試后效果不佳(不穩(wěn)定)。如果服務(wù)器所在網(wǎng)絡(luò)具有公網(wǎng) ip 則無需使用云服務(wù),可以直接實現(xiàn)內(nèi)網(wǎng)穿透。
frp 是一個可用于內(nèi)網(wǎng)穿透的高性能的反向代理應(yīng)用,支持 tcp, udp, http, https 協(xié)議。
- frp 的作用:
- 利用處于內(nèi)網(wǎng)或防火墻后的機器,對外網(wǎng)環(huán)境提供 http 或 https 服務(wù)。
- 對于 http, https 服務(wù)支持基于域名的虛擬主機,支持自定義域名綁定,使多個域名可以共用一個80端口。
- 利用處于內(nèi)網(wǎng)或防火墻后的機器,對外網(wǎng)環(huán)境提供 tcp 和 udp 服務(wù),例如在家里通過 ssh 訪問處于公司內(nèi)網(wǎng)環(huán)境內(nèi)的主機。
4.1 開通阿里云
打開阿里云官網(wǎng),頁面最下方有 學(xué)生機 入口。阿里提供了兩種產(chǎn)品,依據(jù)使用目的選用即可,此處選擇 ECS 產(chǎn)品(預(yù)裝環(huán)境 Ubuntu 16.04 64位,地域根據(jù)所在地選擇):

然后通過阿里控制臺自帶的遠程控制終端,或者 Putty 對系統(tǒng)進行控制。
4.2 frp 配置
根據(jù)對應(yīng)的操作系統(tǒng)及架構(gòu),從 Release 頁面下載最新版本的程序。
將 frps 及 frps.ini 放到具有公網(wǎng) IP 的機器上。
將 frpc 及 frpc.ini 放到處于內(nèi)網(wǎng)環(huán)境的機器上。
- 修改 frps.ini 文件,這里使用了最簡化的配置:
# frps.ini
[common]
bind_port = 7000
- 啟動 frps:
./frps -c ./frps.ini
放入后臺運行可以使用如下命令:
nohup ./frps -c ./frps.ini &
- 修改 frpc.ini 文件,假設(shè) frps 所在服務(wù)器的公網(wǎng) IP 為 x.x.x.x;
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
- 啟動 frpc:
./frpc -c ./frpc.ini
- 通過配置 Putty 訪問即可。
其中 server_port 與 remote_port 都需要在阿里云控制臺中開放相應(yīng)端口權(quán)限,開啟入方向即可。

更多功能實現(xiàn)可以參照 frp 文檔。
4.3 客戶端自啟動
本地服務(wù)器可能經(jīng)常開關(guān)機,因此需要設(shè)置客戶端的開機自啟動,此處使用 supervisor 實現(xiàn),具體資料如下:
- ubuntu安裝和使用supervisor
- ubuntu FRP 設(shè)置開機自啟動
- python 的部署 就差 supervisor 了 supervisor 怎么也起不來 centos+supervisor+gunicorn+django
4.3 frp 多用戶設(shè)置
當(dāng)有多臺客戶端(本地服務(wù)器)需要使用 frp 進行內(nèi)網(wǎng)穿透時,在云服務(wù)器上運行多個 frp 服務(wù)器程序即可,流程與前面提到的 frp 配置相同,僅需修改如下細節(jié):
- 在云服務(wù)器上重新復(fù)制 frp 程序文件,并將其中
frps.ini文件名稍作修改避免沖突,比如改為frps2.ini; -
server_port與remote_port需要重新開辟新的端口,與以有端口不沖突,且在云服務(wù)器開啟相關(guān)安全組權(quán)限; -
nohup ./frps -c ./frps2.ini &命令時第二個 frp 程序后臺運行; - 在第二臺本地服務(wù)器上進行相關(guān)配置。
多用戶配置的參考資料如下: