使用pycharm、跳板機連接內網服務器
接手實驗室服務器后,大部分同學在GPU集群上跑程序都是直接在ssh界面上跑,這里想着通過pycharm通過跳板機來連接服務器。
總體就是實驗室服務器僅限內網訪問,同時實驗室也提供了一個跳板機,可以先ssh到跳板機再從跳板機ssh到內網服務器。然而這種方式不方便傳輸文件,也沒法用pycharm進行自動同步代碼或者遠程調試。本篇文章給出了一個該類問題的解決方案,即通過ssh隧道的方式,用Pycharm通過跳板機連接內網服務器。
步驟一 配置免密登錄
一般情況下,GPU集群都是配置過免密登陸的,所以這個步驟一般是忽略的。
在本地配置
vim ~/.ssh/config
在config文件中輸入以下內容
Host *
ControlPersist yes
ControlMaster auto
ControlPath ~/.ssh/%n:%p
完成配置后在本地登錄一次跳板機.
登錄跳板機,並在跳板機配置
vim ~/.ssh/config
在config文件中輸入以下內容
Host *
ControlPersist yes
ControlMaster auto
ControlPath ~/.ssh/%n:%p
完成配置后在跳板機上登錄一次內網服務器。
步驟二 設置ssh隧道
在本地命令行(win10一般是 powershell)輸入如下命令即可:
ssh -N -f -L 6000:<內網服務器ip>:22 -p <跳板機端口> username@<跳板機ip> -o TCPKeepAlive=yes
比如我的:
ssh -N -f -L 6000:11.11.11.3:22 -p 22 jim@**.**.**.** -o TCPKeepAlive=yes
上述命令各個參數的含義如下:
-N 告訴SSH客戶端,這個連接不需要執行任何命令。僅僅做端口轉發
-f 告訴SSH客戶端在后台運行
-L 做本地映射端口
關於SSH建立管道參考
此時,登錄本地的6000端口就相當於登錄內網服務器了。
ssh -p 6000 服務器用戶名@localhost
步驟三 配置pycharm
配置pycharm
這里只需配置ip為127.0.0.1
, 端口為6000
,並輸入內網服務器的賬號密碼即可看到服務器安裝的python.
具體配置方式參考
步驟四(可選)使用corn 定時維護ssh 隧道
SSH 隧道可能因為網絡不穩定而斷開,每次斷開之后都需要手動再次建立SSH 隧道。下面介紹一種解決方案,通過cron定期執行腳本來維護SSH隧道暢通:
- 編寫腳本,通過判斷socket文件是否存在來判斷隧道連接是否已經斷開
在本地任意位置創建腳本auto_connect.sh
並寫入如下內容(注意更換<>中內容)
#/usr/bin/env sh
if [[ ! -a "~/.ssh/<跳板機ip>:<跳板機端口>" ]]; then
echo "connecting <跳板機ip>:<跳板機端口> .."
ssh -N -f -L 6000:<內網服務器ip>:22 -p <跳板機端口> username@<跳板機ip> -o TCPKeepAlive=yes
if [[ $? -ne 0 ]]; then
echo "failed to connect <跳板機ip>:<跳板機端口>" >&1
exit 2
fi
fi
- 使用cron服務定時執行腳本建立ssh 隧道。在命令行中執行如下語句:(注意修改腳本位置, 路徑不可用縮寫)
echo "0-59 * * * * sh /path/to/auto_connect.sh" > ~/.crontab
crontab ~/.crontab
Reference
整體文章
https://www.jianshu.com/p/8f262bc444f0
關於SSH建立管道
https://www.cnblogs.com/fbwfbi/p/3702896.html
PyCharm 配置遠程python解釋器和在本地修改服務器代碼
https://www.cnblogs.com/jimlau/p/13162664.html
corn 定時維護ssh 隧道
https://frimin.com/2017/01/19/3/
https://www.cnblogs.com/kaituorensheng/p/4494321.html