Colab 如何連線到遠端機器

連線方式

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,攻擊者就可以以你的身分在工作站上做任何事,這是非常危險的!