ssh隧道连接内网服务器和使用pycharm

情况:因为疫情在家,学校的服务器处于内网中,无法直接在家直接访问
另 学校提供了一个跳板机用于访问校内服务器,从而进行一些实验。
mobaxterm连跳板机 然后再ssh对应的服务器,,这样左侧也看不到文件列表,不能使用pycharm直接编辑代码,只能用vim或者本地写好上传,并且上传也麻烦,效果不好。
最近研究了一下 在此提供几种解决办法:
1、teamviewer
2、mobaxterm 的ssh隧道功能
3、本地pycharm设置ssh隧道 并进行远程调试

法一:找学校的老师帮忙开下自己的电脑,开teamviewer就完事了

法二:mobaxterm的ssh隧道,新建一个ssh session:

ssh隧道连接内网服务器和使用pycharm_第1张图片
image.png

这里的 remote host 和 specify username 填 内网服务器的 ip 和自己的id
然后在下面的network settings中
开启 ssh getway 填好跳板机的 ip 、port 和user
然后这样的话 和 mobaxterm直连无区别,并且可以开pycharm


image.png

但是打开pycahrm的速度和服务器的负载有关系,并且编写代码响应的速度也会受到影响。

法三:本地pycharm设置ssh隧道 并进行远程调试

这个办法需要在本地电脑安装pycharm professional版本 只有pro版本可以使用ssh interpreter 使用学生邮箱可以申请一年的pro版本,不过邮箱验证比较慢。

首先
修改跳板机的一个文件

vim ~/.ssh/config

里面加上

Host *
    ControlPersist yes
    ControlMaster auto
    ControlPath ~/.ssh/%n:%p

接着在本地cmd 或者 mobaxterm的local terminal输入
(我用的是mobaxterm的)

ssh -N -f -L 6000:<内网服务器ip>:22 -p <跳板机端口> username@<跳板机ip> -o TCPKeepAlive=yes

上述命令各个参数的含义如下:

  • N 告诉SSH客户端,这个连接不需要执行任何命令。仅仅做端口转发
  • f 告诉SSH客户端在后台运行
  • L 做本地映射端口
  • 关于SSH建立管道隧道

接着输入

ssh -p 6000 服务器用户名@localhost

就能建立起本地与内网服务器的ssh隧道了


image.png

接着我们配置一下 windows的 pycharm
远程调试就是本地的一个proj对应服务器的一个proj 自动同步的
打开pycharm 首先先配置一下ssh编译器 用服务器上你所需要的环境的python


ssh隧道连接内网服务器和使用pycharm_第2张图片
image.png

configure -settings - project interpreter
add一个编译器

ssh隧道连接内网服务器和使用pycharm_第3张图片
image.png

设置host 和 port 和Username
然后连接会输入自己服务器ip的密码 连接成功后 选择所需python编译的目录即可
目录大致如图


image.png

这时候新建一个proj 对应你的 服务器的proj
这里以3DDFA为例
选择刚设置的编译器
接下来就是下载代码文件
tools -deployment configuration
设置一下root path 根目录
和mappings里的deployment path


ssh隧道连接内网服务器和使用pycharm_第4张图片
image.png

image.png

第三个 excluded paths是你不想同步的文件目录
设置完后
tools -deployment download from... 即可 如果是黑的 重启一下pycharm就好
然后download下载完后如图所示
ssh隧道连接内网服务器和使用pycharm_第5张图片
image.png

我测试了一下 在excluded paths里面加了 moudle这个目录 没有同步到本地
这个可以适用于proj中有大量data的目录 可以加在这个目录里
另外tools- start ssh session 可以开启服务器的terminal


ssh隧道连接内网服务器和使用pycharm_第6张图片
image.png

总结一下 法一法二最简单 但是受服务器负载和本地电脑因素

法三 最麻烦 但是代码效率高

最后加上一个维护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
f

使用cron服务定时执行脚本建立ssh 隧道。在命令行中执行如下语句:(注意修改脚本位置, 路径不可用缩写)

echo "0-59   *   *   *   *   sh /path/to/auto_connect.sh" > ~/.crontab
crontab ~/.crontab

本文参考:https://blog.csdn.net/huangbx_tx/article/details/93339715
https://www.cnblogs.com/xiongmao-cpp/p/7856596.html

你可能感兴趣的:(ssh隧道连接内网服务器和使用pycharm)