連線方式
1. 在工作站上安裝 jupyter notebook
可能要使用虛擬環境,推薦使用 uv
uv venv <venv_name> # 建立虛擬環境
. <venv_name>/bin/activate # 啟用虛擬環境
uv pip install notebook # 安裝 jupyter notebook
2. 啟用 jupyter notebook 的 HTTPS
可參考官方文件,但要注意 Colab 無法用密碼登入,所以不要設密碼,預設就會用 token。
首先生成自簽憑證,例如
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem
記得放到安全的地方。
生成 config:
jupyter server --generate-config
編輯 ~/.jupyter/jupyter_notebook_config.py
,加入以下內容:
c.ServerApp.certfile = <path_to_cert.pem>
c.ServerApp.keyfile = <path_to_key.key>
c.ServerApp.ip = '*' # 讓外部連線
c.ServerApp.port = <remote_port> # 建議換一下,避免 8888 被佔用
c.ServerApp.open_browser = False
其實 notebook 發現被佔用就會自己找其他 port,未必需要改 port。
啟動 notebook:
jupyter notebook
會顯示 token,複製下來等等會用到。
3. 在本機設定代理
首先安裝 mitmproxy,推薦用 pip,Ubuntu 的 apt 版本太舊了。
uv pip install mitmproxy
之後只要執行以下指令就行了:
mitmproxy --mode reverse:https://<remote_host>:<hostname> --listen-port <local_port> --set ssl_insecure=true
會有一個互動式的介面,可以瀏覽請求內容。
其中 ssl_insecure=true
是因為憑證是自簽的。
也可以用 mitmdump
,加上 -q
就不會顯示 log 了。
4. 在 Colab 上連線
輸入 http://localhost:<local_port>/tree?token=<token>
備註
使用代理前嘗試過的方法
用 ssh port forwarding
ssh -NL <local_port>:localhost:<remote_port> <username>@<hostname>
當然也可以先 port forwarding 再代理,但這很沒必要。
警告
如果在遠端沒有使用 https 加密,在可能不安全的遠端機器上(比如資工工作站就是)token 會直接被偷走,而 jupyter notebook 提供 terminal,攻擊者就可以以你的身分在工作站上做任何事,這是非常危險的!