背景
聽說vscode remote SSH現在已經完全可用了,一直有給實驗室的機器配置一番以實現遠程編程的想法,但teamviewer是真的卡,其他方法也不盡如我意。但是遺憾的事情是,實驗室的網絡架構是NAT,到我的機器上已經不知道分配了多少級路由了,自然而然的,我的機器也是沒有公網IP的,不過我想起我學生優惠10元/月的阿里雲主機一直還在,並且是有一個公網IP的,那就動手開始內網穿透吧。
更新: 個人而言感覺有些雞肋,因爲我本身主要使用python做科學計算比較多,用這個還不如用jupyter notebook。。。。
材料
- 實驗室機器一臺,系統:ubuntu 18.04 desktop
- 雲服務器一臺, 系統: ubuntu 16.04 server
- mac一臺。
1. 內網穿透
內網穿透的原理就不介紹了,我使用的是github的開源項目frp.
首先分別在兩臺Ubuntu機器上下載 frp
$ wget https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_freebsd_amd64.tar.gz
下載得到壓縮包之後解壓它, 名稱太長了,順便改名
$ tar -zxvf frp_0.29.0_freebsd_amd64.tar.gz
$ mv frp_0.29.0_freebsd_amd64 frp
然後修改服務器的配置文件
$ cd frp
$ vi frps.ini
內容保存如下:
# frps.ini
[common]
bind_port = 7000
接着後臺運行frp服務端
$ nohup ./frps -c ./frps.ini &
然後修改客戶端(即實驗室的機器)的配置,首先進入我們客戶端frp解壓後的位置
$ cd frp
修改配置
$ vi frpc.ini
內容保存如下
# 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
上述配置完成後,我們需要配置阿里雲服務器安全組規則,將7000端口和6000端口曝露出來。這一部分如何操作參見阿里雲相關文檔
注意將協議設置自定義tcp,授權對象可以設置爲0.0.0.0/0
服務器的端口曝露出來之後,就可以啓動客戶端的內網穿透程序了
$ nohup ./frpc -c ./frpc.ini &
這樣操作完了之後,就可以在mac上通過以下命令ssh到實驗室的機器了
$ ssh -oPort=6000 用戶名@服務器的ip
配置ssh免密登錄
上面步驟完成之後就可以ssh連接到實驗室機器了,但是vscode remote ssh需要用公鑰免密登錄。
首先在mac上生成我的公鑰
$ ssh-keygen
需要輸入一些信息,如果想省事,除了郵箱都直接回車也行。
$ vi ~/.ssh/id_rsa.pub
把裏面的內容都複製下來,這就是mac的公鑰。
接下來需要想辦法把公鑰複製到實驗室機器上,我是先放在服務器上,在用實驗室機器連接服務器上然後複製下來的,因爲爲的服務器也添加了對我的mac免密登錄。如果嫌麻煩,你可以用ubuntuPaste (不過用這個傳公鑰的安全性問題你自行考慮,我是覺得問題不大)
接下來在實驗室機器上
$ vi /etc/ssh/sshd_config
確保有以下幾行
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
如果是no就改爲yes,如果沒有就加上
$ vi .ssh/authorized_keys
添加上剛纔從mac上覆制過來的公鑰
實驗室機器重啓ssh
$ service sshd restart
mac上通過以下命令ssh到實驗室的機器就無需填寫密碼了
$ ssh -oPort=6000 用戶名@服務器的ip
3. vscode remote ssh配置
確保mac可以免密登錄到實驗室機器後,接下來就很簡單了,就參考這兩篇吧
官方文檔
知乎上的
4. 體驗
等我體驗1下之後再來補上。
更新: 個人而言感覺有些雞肋,因爲我本身主要使用python做科學計算比較多,用這個還不如用jupyter notebook。。。。
更多技術乾貨歡迎關注公衆號「HackDev」,一個愛折騰的程序員。