pycharm + ssh 跳板機 + 服務器
場景
在內網的本地通過在外網的跳板機(堡壘機)連接外網的服務器,希望調試、同步修改代碼,避免出現: 使用pdb、print大法,本地修改代碼再上傳至服務器、出現bug再從服務器拉取下來,這些嚴重影響調試速度的情況。
步驟
1. ssh免密登錄
參考: https://zhuanlan.zhihu.com/p/53792195,在本地的C:\Users\<Administrator>\.ssh
的文件夾下建立config
文件(.ssh
文件夾沒有,就新建個),然後在config
裏面輸入如下代碼:
Host <jump>
HostName <x1.x1.x1.x1>
User <xxx>
Port <xxx>
Host <remote>
HostName <x2.x2.x2.x2>
User <xxx>
Port <xxx>
ProxyCommand ssh -q -W %h:%p <local>
這裏的<jump>
是指跳板機,你可以改成喜歡的名字,<x1.x1.x1.x1>
是跳板機的ip,User
、Port
都是登錄跳板機的所提供的參數(注意不是隨便填個22就完事的哦);<remote>
指服務器,也是命名而已,可以隨便改,<x2.x2.x2.x2>
是服務器的ip,User
、Port
都是從跳板機登錄服務器所提供的參數。把本地登錄跳板機的祕鑰都放到.ssh
文件夾中,如下圖所示。
然後在本地的shell
(注意是shell
不是windows的cmd
,win的powershell
或許也可以,沒試過),嘗試ssh <jump>
,如果登錄成功,說明本地 -> 跳板機
的ssh隧道免密登錄已經弄好了,接着是跳板機 -> 服務器
的ssh免密登錄,方法同本地一致:vim ~/.ssh/config
,如果在跳板機上直接go <x2.x2.x2.x2>
,那麼恭喜你,本地 -> 跳板機
的ssh隧道也搭建好了,不用再重新搭建了。
2. 隧道轉發
參考: https://blog.csdn.net/qq_33039859/article/details/89503464的第7、8條,在shell裏輸入如下指令,進行ssh轉發:
ssh -N -f -L <轉發至本地的端口號, 隨便起, 這裏我是6000>:<x2.x2.x2.x2, 服務器ip>:<服務器端口> -p <跳板機端口> <登錄跳板機的用戶名>@<x1.x1.x1.x1, 跳板機ip> -o TCPKeepAlive=yes
3. pycharm的dev環境、解釋器配置
注意 pycharm必須是Professional版才行
- dev環境
這裏的ip是localhost,因爲使用了ssh轉發到了localhost的6000端口,按圖填就好。 - 解釋器
可以create或者move,視情況而定。 - 檢查下
終於可以開心的調試了~
題外話
項目得全部下載後纔可以調試,如果模型也放在項目文件裏的話,一個模型也就1、2g吧,那這個下載同步就是災難性的,項目初始化會是很慢很慢的。
所以有些時候,我用jupyter notebook
來修改遠程代碼,這樣要方便一些。