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