当前位置: 首页 > Linux

惊人的!一款可以实现安全自动化跨网访问的神器

时间:2023-04-06 11:51:30 Linux

AutoSSH是一款安全自动化SSH登录的软件。!比如我们在host2机器上部署了很多服务,但是由于某些原因我们不能直接ssh访问服务器对应的端口及其服务,但是host3服务器既可以访问host2服务器也可以访问我们的host1服务器。这就是,我们可以通过设置ssh来访问服务。但是仍然存在两个问题:需要保持终端打开,防止SSH进程被关闭;由于网络故障/波动导致SSH终止时,不会自动重新连接。前者可以使用tmux等第三方工具解决,后者则需要supervisor等第三方监控工具,不过我们还有一个更常用的选择,就是使用autossh工具。工具介绍-这个工具最初的灵感和机制来自rstunnel!autossh工具是一个命令行应用程序,用于启动和监控ssh服务。它可以在程序出现问题或网络出现问题时重启ssh服务。在autossh1.2中,它的方法发生了变化:autossh使用ssh构造一个ssh重定向循环(本地到远程,远程到本地),然后发送测试数据并取回结果。autossh1.3新增了一个方法:可以指定远程echo服务的端口返回测试数据发送结果。这避免了握手阶段和所有远程机器端口冲突问题,而旧的转发循环方法仍然有效。内网主机主动连接外网主机,也称为反向连接(ReverseConnection),这样NAT路由/防火墙就会在内网主机和外网主机之间建立映射,从而相互通信。但是这个映射是由路由网关自动维护的,不会继续下去。如果连接断开或网络不稳定,通信将失败。这时候内网主机就需要一个自动重连机制。##安装方式$yuminstallautossh$aptinstallautossh使用方式autossh使用系统自带的SSH端口映射功能,性能开销很小。命令使用方法#autosshusageautossh[-V][-Mport[:echo_port]][-f][SSH_OPTIONS]命令使用参数-M#出现问题会自动重连;服务器回显机制使用的端口-D#本机动态应用端口转发-R#转发远程主机(服务器)的某个端口到本端指定机器的指定端口-L#转发某个端口本地机器(客户端)到远程端指定机器的指定端口-f#后台运行-T#不占用shell-n#与-f参数一起使用-N#不执行远程命令-q#运行在静音模式;忽略提示和错误命令usedemo#Localportbinding(Runonhost1server)#将发送到本机8527端口的所有数据转发到远程主机的8000端口$ssh-vv-N-Dlocalhost:8527root@host2-p8000#主要用于更新安全正在运行的ssh服务$autossh-M5678-vv-N-Dlocalhost:8527root@host2-p8000示例演示SSH只支持TCP端口映射!如果要映射的端口不多,只有几个,autossh确实是最好的好选择。不过如果需要映射大量的端口,还是建议使用ngrok之类的端口映射工具,毕竟这类工具的管理功能比较完善。Localportbindingandforwarding(-L)=>settingonhost1#会在host1主机上开启一个本地监听端口5900#之后访问本地5900端口的流量会被转发到host2的8000端口#Where-TheM参数负责通过5678端口监听连接状态,如果连接出现问题,会自动重连$autossh-M5678-fCN-L5900:localhost:8000root@host3$autossh-M5678-fCN-L5900:root@host2:8000root@host3远程端口转发功能(-R)=>setonhost3#会在host1主机上开启一个本地监听端口5900#之后访问本地5900端口的流量将被转发到host2的8080端口#其中-M参数负责通过5678端口监听连接状态,当连接出现问题时会自动重连。$autossh-M5678-fCN-R5900:localhost:8000root@host1$autossh-M5678-fCN-R5900:root@host2:8000root@host1动态端口转发功能(-D)=>在host1上设置#动态端口转发功能$autossh-M5678-vv-D1080root@host2系统启动时自动启动,服务自动启动!在Ubuntu或CentOS系统上,我们使用systemd来管理autossh启动问题。配置很简单,只需要创建一个服务启动配置文件如下。在旧版本中,可以使用init.d来管理模式,只需要在rc.local文件中添加相应的命令即可。#Ubuntu#配置文件地址#/etc/systemd/system/remote-autossh.service[Unit]Description=AutoSSHserviceforremotetunnelAfter=network-online.target[Service]User=rootExecStart=/usr/bin/autossh-M5678-fCNR18081:host2:8080root@host1[Install]WantedBy=multi-user.target#CentOS#配置文件地址#/etc/rc.d/rc.local$/usr/bin/autossh-M5678-fCNR18081:host2:8080root@host1编写启停脚本随时随地启停我们服务端口映射!PASS="escapelife"doexit(){expect-c"settimeout-1spawn$1-tpsaux|grepescape|grepsshd|awk'{print$2}'|xargskill-9expect{"*?assword:*"{Send"$Passr"}}ExpectEof"}Dossh(){noHupExpect-C"SetTimeout-1spawn$1Expect{"*?assword:*"{send"$Passr";Exp_continue}"&}}}}#先关闭各个服务器的sshd连接doexit"ssh-o-p6622escape@aliyun"#开始ssh端口映射dossh"autossh-o-M5678-N-L5900:127.0.0.1:8000escape@aliyun-p6622》作者:EscapeLink:https://www.escapelife.site/p...