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
来修改远程代码,这样要方便一些。
上述有误,实际上根本不用把整个项目都dump下来,可以按需dump对应代码。另外用jupyter notebook
可以看看输出的图像,这点还是蛮方便的,现在我是全程用pycharm调试。