自己架一個 jupyter remote machine

陳奕熹
陳奕熹
Jan 11 · 4 min read

關於「怎麼用 ssh 遠端開啟 python jypyter」網路上已經有非常多的教學文章了,我自己則是主要參考 5 easy steps to start editing python notebooks over SSH 這篇文章再去針對我的環境做一些改動

然後我自己對網路管理沒有太多經驗,所以像是路由設定這種就是個菜鳥,也就是說這是一篇網路菜鳥寫的記事文章

背景需求

我想透過本地端裝置(像是筆電)連到實驗室的主機提供的服務,具體實做方式是「實驗室主機透過 jupyter notebook 指令開一個網頁界面,由本地端在網頁瀏覽器上操作」

首先我目前看到大多數教學都提到把這個網頁架在 localhost,這代表我的本地電腦是一定需要透過遠端電腦的內網才能存取到該網頁

這個需求聽起來很基本,而且基本上跟教學文章的使用場景差不多阿

的確直到目前使用場景都跟教學一樣,使用教學上寫的的方法是

遠端電腦首先在遠端 localhost 的 port 8080 開啟 jupyter 服務

接下來這條指令相當關鍵

ssh -N -L 8080:localhost:8080 <remote_user>@<remote_host>

這一行指令的用途在於「把本地端的 port 8080 與遠端的 port 8080 間行程一個通道(secure tunneling)」,這樣我就可以透過本地端的 port 8080 看到遠端 port 8080 的資料了,需要注意的是本地端的遠端的 port 不一定要一樣,並且 ‘-N’ 代表這次 ssh 並不會輸入任何指令,這是因為這次 ssh 的目的單純只是建立一個通道以通訊而已

最後我們就可以透過網頁瀏覽器在本地端的 port 8080 看到遠端 port 8080 的資料了

不過事實上,我的環境狀況需要對以上的流程做一點修改

原因在於「我的遠端電腦是由路由器 port forwarding 連到外網的」

port forwarding 是外網主機想要透過路由器連到其內網中任意電腦的方法之一,主要是透過「每當有外部訊息想傳到路由器特定 port ,路由器會自動把該訊息導到對應的內網主機」這樣的想法;事實上,不只是路由器,虛擬機像是 QEMU 也會有 port forwarding 的需求,如果你不想設定虛擬網路的話,可以透過 port forwarding 把虛擬機的 port forward 到 host machine 上

並且我希望 jupyter 服務的開啟與關閉也可以同時透過 ssh 遠端完成

所以我現在的部屬流程如下

首先利用路由器 forward port 9200,用 ssh 連上遠端電腦後開啟 jupyter notebook

然後再開另外一個 ssh 建立通訊通道,要注意的是這邊 port 要再選擇一個新的(這邊還要設定路由器的 port fowarding)

最後就是用網頁瀏覽器瀏覽本地的 localhost:9201

你會注意到我總共開了跟遠端的兩條 ssh 連線,這對宿舍網路不太穩的我其實是有點擔心的

陳奕熹

Written by

陳奕熹

應該要是一個工程師的……

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade