首页 > 其他分享 >[转]用autossh工具进行端口转发

[转]用autossh工具进行端口转发

时间:2024-06-12 17:22:18浏览次数:20  
标签:autossh 端口 host2 转发 5678 root

原文地址:用autossh工具进行端口转发 | Escape

AutoSSH 是一种用以对 SSH 登录进行安全地自动化的软件!

比如我们在 host2 机器上面部署了很多服务,但是由于某种原因导致我们无法直接 ssh 访问该服务器已经其上服务的对应端口,但是 host3 服务器,既能够访问 host2 服务器,又可以访问我们的 host1 服务器。这时,我们就可以通过设置 ssh 来进行服务的访问。但是还有两个问题:你需要保持终端开启防止 SSH 进程被关闭;由于网络故障/波动导致 SSH 终断时无法自动重连。

前者可以使用 tmux 等第三方工具来解决,后者需要 supervisor 等第三方监控工具,不过我们还有一个更常用的选择方案,那就是使用 autossh 工具。

 

用autossh工具进行内网穿透 用autossh工具进行内网穿透

 


1. 工具介绍

该工具的起初灵感和机制来自于 rstunnel

autossh 工具是一个用来启动 ssh 服务并进行监控的命令行应用程序,可以在程序出现问题或者发生网络故障的时候,重启 ssh 服务。

  • 在 autossh 1.2 的时候,其方法已经改变了:autossh 使用 ssh 来构造一个 ssh 重定向循环(本地到远程和远程到本地),然后发送测试数据并获得返回结果。
  • 在 autossh 1.3 增加了一个新的方法:可指定远程 echo 服务的端口用于返回测试数据发送结果。这个避免握手阶段以及所有远程机器端口的冲突问题,而老的 loop-of-forwardings 方法依然可用。

内网主机主动连接到外网主机,又被称作反向连接(Reverse Connection),这样 NAT 路由/防火墙就会在内网主机和外网主机之间建立映射即可相互通信了。但这种映射是路由网关自动维持的,不会持续下去,如果连接断开或者网络不稳定都会导致通信失败,这时内网主机需要自动重连机制了。

  bash
# 安装方式
$ yum install autossh
$ apt install autossh

2. 使用方式

autossh 使用了系统原生的 SSH 端口映射功能,所以性能开销非常小。

  • 命令使用方式
  bash
# autossh usage
$ autossh [-V] [-M port[:echo_port]] [-f] [SSH_OPTIONS]
  • 命令使用参数
编号参数含义说明
1 -M 用于有问题时就会自动重连;服务器 echo 机制使用的端口
2 -D 本地机器动态的应用程序端口转发
3 -R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
4 -L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
5 -f 后台运行
6 -T 不占用 shell 终端
7 -n 配合 -f 参数使用
8 -N 不执行远程命令
9 -q 安静模式运行;忽略提示和错误
  • 命令使用演示
  bash
# 本地端口绑定(在host1服务器上面运行)
# 将所有发送到本机的8527端口的所有数据转发到远程主机的8000端口
$ ssh -vv -N -D localhost:8527 root@host2 -p 8000

# 主要是为了更新安全的运行ssh服务
$ autossh -M 5678 -vv -N -D localhost:8527 root@host2 -p 8000

3. 示例演示

SSH 仅支持 TCP 端口映射!

如果需要映射的端口不多,只有几个的话,autossh 确实是最佳选择。但是如果需要映射大量端口,建议还是使用类似 Ngrok 的端口映射工具,毕竟这类工具拥有比较完善的管理功能。

  • [1] 本地端口绑定和转发 (-L) => 在 host1 上面设置
  bash
# 将在host1主机上开启一个本地侦听的5900端口
# 这样之后,访问本地5900端口的流量将转发至host2的8000端口
# 其中-M参数负责通过5678端口监视连接状态,连接有问题时就会自动重连
$ autossh -M 5678 -fCN -L 5900:localhost:8000 root@host3
$ autossh -M 5678 -fCN -L 5900:root@host2:8000 root@host3

 

用autossh工具进行内网穿透 用autossh工具进行内网穿透

 

  • [2] 远程端口转发功能 (-R) => 在 host3 上面设置
  bash
# 将在host1主机上开启一个本地侦听的5900端口
# 这样之后,访问本地5900端口的流量将转发至host2的8080端口
# 其中-M参数负责通过5678端口监视连接状态,连接有问题时就会自动重连
$ autossh -M 5678 -fCN -R 5900:localhost:8000 root@host1
$ autossh -M 5678 -fCN -R 5900:root@host2:8000 root@host1

 

用autossh工具进行内网穿透 用autossh工具进行内网穿透

 

  • [3] 动态端口转发功能 (-D) => 在 host1 上面设置
  bash
# 动态端口转发功能
$ autossh -M 5678 -vv -D 1080 root@host2

4. 开机自启动

系统开机,服务自启动!

在 Ubuntu 或 CentOS 系统中,我们使用 systemd 来管理 autossh 的开机启动问题。配置很简单,只需要创建一个如下服务启动配置文件,即可。旧版本中可以使用 init.d 来管理方式,只需要添加对应命令到 rc.local 文件,即可。

  bash
# Ubuntu
# 配置文件地址
# /etc/systemd/system/remote-autossh.service
[Unit]
Description=AutoSSH service for remote tunnel
After=network-online.target

[Service]
User=root
ExecStart=/usr/bin/autossh -M 5678 -fCNR 18081:host2:8080 root@host1

[Install]
WantedBy=multi-user.target
  bash
# CentOS
# 配置文件地址
# /etc/rc.d/rc.local
$ /usr/bin/autossh -M 5678 -fCNR 18081:host2:8080 root@host1

5. 编写启停脚本

可以随时随地的启动、停止我们到服务端口映射!

  bash
PASS="escapelife"

doexit(){
    expect -c "
    set timeout -1
    spawn $1 -t ps aux |grep escape |grep sshd |awk '{print $2}' |xargs kill -9
    expect {
        \"*?assword:*\" {
            send \"$PASS\r\"
        }
    }
    expect eof
    "
}

dossh(){
    nohup expect -c "
    set timeout -1
    spawn $1
    expect {
        \"*?assword:*\" {
            send \"$PASS\r\";
            exp_continue
        }
    }
    " &
}

# 先关掉每台服务器的sshd连接
doexit "ssh -o -p 6622 escape@aliyun"

# 启动ssh端口映射
dossh "autossh -o -M 5678 -N -L 5900:127.0.0.1:8000 escape@aliyun -p 6622"
 

标签:autossh,端口,host2,转发,5678,root
From: https://www.cnblogs.com/dirgo/p/18244361

相关文章

  • 解决阿里云的端口添加安全组仍然无法扫描到
    发现用线上的网站扫不到这个端口,这个端口关了,但是没有更详细信息了我用nmap扫了一下我的这个端口,发现主机是活跃的,但是有防火墙,我们列出云服务器上面的这个防火墙list,发现确实没有5566端口参考:解决:阿里云服务器添加安全组端口映射后仍无法访问_阿里云安全组配置了端口还是没......
  • 端口映射和端口转发区别是什么
    端口映射和端口转发的最大区别,是前者可以包括端对端P2P穿透,后者是完全走转发。例如北京金万维公司的快解析内网穿透软件端口映射,同时包含了P2P穿透和转发双重模式,只要可以上网就可以将本地端口快速映射到外网访问。以下是内网映射公网的实现步骤分享。1.明确内网访问。不管是......
  • SSRF 漏洞实践:端口扫描与任意文件读取
    服务器端请求伪造(SSRF)是一种隐蔽且危险的安全漏洞,它允许攻击者欺骗服务器向其他服务器发送请求,从而访问或控制未经授权的系统。本文将通过实践案例,介绍SSRF漏洞在端口扫描和任意文件读取方面的应用,帮助您了解并防范这种漏洞。端口扫描SSRF漏洞可以用来探测目标服务器开......
  • MySQL8.0默认TCP端口介绍
    1、本文内容选择题TCP/IPMySQL8.0的默认TCP端口showvariables查看总结2、选择题A、3306B、33060C、33062D、330633、TCP/IPTCP/IP(TransmissionControlProtocol/InternetProtocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。以下是......
  • 微信小程序加载、更新和生命周期、分享、转发、获取头像、获取昵称、手机号、客服功能
    【上拉下拉加载】1后端和路飞项目的课程表相对应234-----wxml-------567<viewwx:for="{{goods}}"wx:key="index">{{item.name}}</view>8910------js-----------111213Page({14data:{15page:1,16goods:[]......
  • 基于user-agent 转发
    在Nginx中,可以使用$http_user_agent变量来获取请求的User-Agent头,然后基于这个头的值来决定如何转发请求。实现方式一:http{map$http_user_agent$backend{defaulthttp://backend3;~*Chromehttp://backend1;~*Firefoxhttp://backend2;......
  • 有哪些针对平台端口的常见攻击手段
     针对平台端口的攻击可以通过多种手段进行,这些手段涵盖了从扫描探测到利用漏洞入侵的整个过程。以下是一些常见的攻击手段及其简要描述:端口扫描攻击:攻击者使用端口扫描工具(如Nmap)探测目标系统开放的端口。通过分析响应或错误消息,攻击者可以确定哪些端口是开放的,为后续攻击......
  • linux——开放指定端口操作
    linux开放指定端口查看系统上开启了哪些端口1、使用netstat命令:sudonetstat-tuln该命令将显示所有当前监听的TCP和UDP端口。其中,-t表示显示TCP端口,-u表示显示UDP端口,-l表示仅显示监听状态的端口,-n表示以数字形式显示端口号。2、使用ss命令:ss-tuln此......
  • 【go】【rpc】【同一端口,提供多种服务】
    @目录写在前面1.需求1.起另外的服务端口2.一个端口监听3.同一个端口相同方法监听参考资料基础/标准库/第三方库golang导航编程规范算法|面试项目写在前面相关博文个人博客首页免责声明:仅供学习交流使用!开源框架可能存在的风险和相关后果将完全由用户自行承担,本人不承担......
  • 查看Linux端口占用和开启端口命令
    查看端口的使用的情况lsof命令比如查看80端口的使用的情况lsof-itcp:80列出所有的端口netstat-ntlp查看端口的状态/etc/init.d/iptablesstatus开启端口以开启端口80为例。1用命令开启端口iptables-IINPUT-ptcp--dport80-jaccpet --写入要开放的端......