在 Pycharm同步linux服务器进行远程开发 这篇文章中,作者介绍了通过sftp来让pycharm可以同步服务器的文件,还可以使用服务器的python解释器,从而方便代码的同步和调试。
然而很多服务器可能只有通过内网(例如校园网)甚至在局域网内才可以通过ssh访问。我所处的实验室就是这种情况,只有一台服务器有公网ip(假设是222.222.222.222,主机名和用户名都为alpha,密码为alphapw),其他几台服务器只有局域网ip(假设其中的一台ip是192.168.0.100,主机名和用户名都为beta,密码为betapw),更难受的是,有公网ip的那个服务器也只能用校园网ip来访问,非校园网无法访问。
为了在外网也能通过ssh访问服务器,一个可行的办法是先利用学校提供的vpn服务来获得校内ip地址,然后就可以通过ssh访问alpha了。如果想访问其他服务器,例如beta,可以在使用ssh连接到alpha后,以alpha作为中转,再通过一次ssh来连接beta。
然而上面的做法是不能用于pycharm的项目同步部署功能的,反正我没发现如何让pycharm利用中转来设置,所以我想了个其他办法,参考了这篇文章:使用SSH隧道实现多层主机大穿越
最关键的步骤:建立SSH“中转隧道”。
在windows下,到putty官网下载然后安装putty,接着执行以下命令:
plink.exe -N -pw alphapw -L 127.0.0.1:12345:192.168.0.100:22 alpha@222.222.222.222
运行后,plink.exe不会退出,会一直运行才可以使用这条“中转隧道”。这时在你的电脑(127.0.0.1)上,将会建立起一个监听端口12345,连接这个端口就相当于连接了beta服务器(192.168.0.100)的22端口。这时用打开另一个cmd,输入ssh -p 12345 beta@127.0.0.1
即可与beta服务器建立ssh连接。在pycharm中,配置sftp服务器时的host填127.0.0.1
,port填12345
,即可配置本地项目与服务器同步。
注意事项:
1)最好事先用netstat -aon|findstr "12345"
来查看是否准备使用的端口是否已经被占用
2)安装时可以选择自动配置环境变量,或者安装后自己将putty的安装目录(plink.exe所在目录)加入Path中。
3)如果你自己用的电脑是Linux系统,plink.exe
可以用ssh来代替。(引自原博客,本文未验证该点)。
隐藏CMD窗口并使用自动化脚本
上面介绍的操作可以用bat脚本实现自动化并实现隐藏CMD窗口的效果(类似于linux下的后台进程)。
1、新建一个bat文件,假如命名为ssh-bridge.bat
,内容填写如下:
@echo off
echo.|plink.exe -N -pw alphapw -L 127.0.0.1:12345:192.168.0.100:22 alpha@222.222.222.222
exit
2、安装RunHiddenConsole
自行搜索或到这里下载。安装后记得配置好环境变量。
3、再编写一个bat脚本,假如命名为connect.bat
,内容编写如下:
@echo off
RunHiddenConsole.exe ssh-bridge.bat
exit
然后将ssh-bridge.bat
和connect.bat
放到同一个文件夹下,并将该文件夹加入到环境变量。
完成以上3步,以后就可以在重启机器后这样操作:
1、连接校园网的VPN。(如果可以直接访问alpha服务器则可跳过这一步)。
2、打开cmd,输入connect.bat
然后回车,接着可以关闭这个窗口。
不出意外(例如网络质量的原因导致未连接成功等),此时已经可以用ssh来直接连接beta服务器,并且如果之前已经配置过pychar的项目同步(配置一次即可),则现在已经可以正常使用。