1. 程式人生 > 實用技巧 >使用pycharm、跳板機連線內網伺服器

使用pycharm、跳板機連線內網伺服器

使用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 <跳板機埠> [email protected]<跳板機ip> -o TCPKeepAlive=yes

比如我的:

ssh -N -f -L 6000:11.11.11.3:22 -p 22 [email protected]**.**.**.** -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隧道暢通:

  1. 編寫指令碼,通過判斷socket檔案是否存在來判斷隧道連線是否已經斷開

    在本地任意位置建立指令碼auto_connect.sh並寫入如下內容(注意更換<>中內容)
#/usr/bin/env sh
if [[ ! -a "~/.ssh/<跳板機ip>:<跳板機埠>" ]]; then
echo "connecting <跳板機ip>:<跳板機埠> .."
ssh -N -f -L 6000:<內網伺服器ip>:22 -p <跳板機埠> [email protected]<跳板機ip> -o TCPKeepAlive=yes
if [[ $? -ne 0 ]]; then
echo "failed to connect <跳板機ip>:<跳板機埠>" >&1
exit 2
fi
fi
  1. 使用cron服務定時執行指令碼建立ssh 隧道。在命令列中執行如下語句:(注意修改指令碼位置, 路徑不可用縮寫)
echo "0-59   *   *   *   *   sh /path/to/auto_connect.sh" > ~/.crontab
crontab ~/.crontab

本部分參考這裡, 使用cron服務定時執行指令碼參考這裡

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