ssh 反向隧道内网穿透

反向代理

ssh  -fCNR

正向代理
ssh  -fCNL

-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
-p 指定远程主机的端口

 

 1、先在目标机器建立到跳板机的反向代理:ssh -fCNR 7280:localhost:22 root@123.123.123.123

 2、服务器建立正向代理:ssh -fCNL *:1234:localhost:7280 localhost

  在此1234端口为本地转发端口,负责和外网进行通信,并将数据转发的7280这个端口,实现了可以从其他机器访问的功能。同时,*号表示可以接受任何IP的访问。

 3、此时,就能从外网直接通过1234 端口访问到内网目标机器了

  ssh  pi@localhost -p1234

 

3.1  ssh-keygen -t rsa     # 生产ssh密钥

 4、免密登录在目标机执行(将公钥发送给目标机器)

  ssh-copy-id  目标机用户名@公网IP  -p1234

 5、autossh 自动重连

   目标机先安装autossh    安装命令 apt-get install update,  apt-get install upgrade,  apt-get install autossh;

autossh -M 5678 -NfR port:localhost:22 root@公网ip # -M参数,这个参数指定一个端口,这个端口是外网的B机器用来接收内网A机器的信息,
如果隧道不正常而返回给A机器让他实现重新连接。

  在跳板机上 netstat -pan |grep port 如果 只监听127.0.0.1,可以修改/etc/ssh/sshd_config/设置GatewayPorts为yes

目标机代码如下:

from Base.setting import setting
import os

def start_autoSSH():
    GuardianID = setting.mncode[-4:]
    GuardianID = str(int(GuardianID)+8000)

    command =  'autossh -M 5678 -NfR %s:localhost:22 root@%s' % (GuardianID,setting.ssh_server)
    print(command)
    os.system(command)


start_autoSSH()


# ssh -NfR 1011:localhost:22 root@46.96.101.117

 

posted @ 2021-11-25 14:30  Orientation  阅读(881)  评论(0编辑  收藏  举报