使用 autossh 建立反向 SSH 隧道管理个人计算机
假设你有这样一个需求:你在家中有一台 Linux/Unix 设备,可以是路由器、NAS 或者台式机,存有自己常用工具或者数据,想要在自己外出时也能随时访问。那么你现在的目的和我一样了,你所需要的是少许 Linux/Unix 经验以及一台能够从公网访问的中继服务器。我们所需要的技术是通过 SSH 隧道搭建一个反向代理。
配置
在你的 SSH 配置文件中加入这一行GatewayPorts clientspecified
。可以直接使用命令:sudo echo "GatewayPorts clientspecifie" >> /etc/ssh/sshd_config
。
然后重新加载 SSH 配置文件:sudo reload ssh
。
然后在本地建立连接: ssh -f -R 0.0.0.0:20000:localhost:22 local_user@a_a_a_a
现在还有两个问题:你需要保持终端开启防止 SSH 进程被关闭;由于网络故障/波动导致 SSH 终断时无法自动重连。
前者可以使用 -N
参数来解决,后者需要 supervisor
等第三方监控工具。
使用 autossh 代替 ssh
不过我们还有一个更常用的选择方案:autossh
:
autossh -M 20001 \
-fN -o "PubkeyAuthentication=yes" \
-o "StrictHostKeyChecking=false" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" \
-R a_a_a_a:20000:localhost:22 \
-p 8383 remote_user@a_a_a_a
说明:
-M 20001
选项指定中继服务器上的监视端口,用于交换监视 SSH 会话的测试数据,需要保证该端口在服务器上未被占用。-o
用于设置 autossh 参数。-f
指定 autossh 在后台运行,并不会传给 ssh。和 ssh 的-f
不一样,autossh 指定-f
时将无法寻求密码。指定-f
时,会将环境变量AUTOSSH_GATETIME
覆盖为 0!
开机启动
在 Ubuntu 中我们可以使用 systemd 管理 autossh 的开机启动问题(旧版本中可以使用 init.d)。配置很简单,只需要创建一个 /etc/systemd/system/remote-autossh.service
文件:
[Unit]
Description=AutoSSH service for remote tunnel
After=network-online.target[Service]
User=your_username
ExecStart=/usr/bin/autossh -M 20001 -N -o "PubkeyAuthentication=yes" -o "StrictHostKeyChecking=false" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R a_a_a_a:20000:localhost:22 -p 8383 remote_user@a_a_a_a[Install]
WantedBy=multi-user.target
这样就创建了一个 remote-autossh
服务,并指定其在网络服务启动后启动。可以运行 systemctl daemon-reload && systemctl start remote-autossh
立即启动服务,或者 systemctl enable remote-autossh.service
启动服务并设置为开机启动。
需要注意的是,配置文件中的 autossh 命令需要替换为其绝对地址,以及不支持 -f
参数。
========================================================================================================================================例子=============================================================
通常家用的宽带没有公网IP,运营商现在都分配的是内网IP。这样,公网上的机器就无法直接访问到内网的机器。
SSH具有建立反向隧道的能力,进行内网穿透,前提是我们有一台有公网IP的机器,假设机器情况如下:
机器 | 网络 | IP | 端口 |
---|---|---|---|
A | 公网 | 114.114.114.114 | 80 |
B | 内网 | 192.168.10.1 |
7777 |
1.修改公网机器A的SSH配置文件/etc/ssh/sshd_config
GatewayPorts yes
这样可以把监听的端口绑定到任意IP 0.0.0.0上,否则只有本机127.0.0.1可以访问。
2.在内网B的机器上执行命令,建立反向隧道
ssh -NfR 80:127.0.0.1:7777 root@114.114.114.114
然后输入密码,通道即建立成功。
-N:只建立连接,不打开shell
-f:建立成功后在后台运行
-R:指定端口映射
此时,会在A的机器上开一个80端口监听,所有访问公网机器A的80端口的请求都会转发到内网B的7777端口上。
在公网A机器上查看端口:
[root@upshi ~]# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1578 root 8u IPv4 19403 0t0 TCP *:cbt (LISTEN)
如果不想每次都输入密码,可以配置一下SSH免密登录。
AutoSSH 自动重连
使用SSH的方式不够稳定,使用AutoSSH可以自动在连接断开时自动重连,再把AutoSSH加入系统服务自动启动,则可以做到稳定的连接。
1.安装AutoSSH
sudo apt-get install autossh
2.执行AutoSSH命令
autossh -M 5555 -NR 80:127.0.0.1:7777 root@114.114.114.114
-M:在5555端口上监听连接的变化,只要断开就重连 少了-f 参数,因为AutoSSH本来就在后台运行
使用 autossh 建立反向 SSH 隧道管理个人计算机相关推荐
- 建立稳定安全的SSH隧道
本文将教你如何通过 SSH 隧道把本地服务映射到外网,以方便调试,通常把这种方法叫内网穿透. 目的 把运行在本地开发机上的 SSH 服务(或其他服务如HTTP等)映射到外网,让全世界都能通过外网 IP ...
- SSH隧道 / SSH穿透
在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问.但我们一般都会在本地开发,因为这能快速的看到源码修改后的运行结果.但当涉及到需要调用微信接口时,由于不和你 ...
- Linux下使用Shell脚本实现反向ssh自动交互
本文章简单介绍如何通过脚本实现反向ssh的登录,有了该脚本,可以实现反向ssh隧道的自动交互,该脚本可供其他应用程序直接调用,不需要用户手动触发,给使用者提供方便. 首先生成一份名为"aut ...
- 使用Xshell实现SSH隧道穿透
最近公司开发项目遇到了一个非常蛋疼的事情!我们公司同时迁入了电信.移动.联通三家的百兆光纤网络,这样就产生一个蛋疼事情. A所使用的网络是电信网络,他是开发的了微信功能的服务的接口项目,给B和C提供所 ...
- ssh 隧道_SSH隧道介绍
ssh 隧道 最近,我想设置一个从家用PC到笔记本电脑的远程桌面共享会话. 在阅读设置指南时,我遇到了ssh隧道技术. 尽管有很多关于该主题的文章,但我还是花了很多时间进行谷歌搜索,一些实验和几次Wi ...
- SSH隧道技术----端口转发,socket代理
原文的原始出处不详,本文也是在复制引用了某篇转载,并做了必要的整理与编辑. 本文的受众 如果你遇到了以下问题,那么你应该阅读这篇文章 我听说过这种技术,我对它很感兴趣 我想在家里访问我在公司的机器(写 ...
- centos mysql ssh连接,使用SSH隧道连接MYSQL
1. 概述 本文介绍了如何使用SSH隧道连接MySQL,网络隔离导致无法直接访问数据库的问题. 第2节对需求进行了简单的描述:第3节介绍了linux环境下,如何通过SSH隧道连接MySQL:第4节介绍 ...
- 利用反向SSH从外网访问内网服务器
学院的服务器在学院的内网,出了学院就不能访问,在宿舍.家里学习很不方便没有服务器的话.之前一直用TeamViewer,但是用着不舒服.最近新找到一个办法,就是利用外网服务器以及反向SSH搭一条通道,使 ...
- SSH隧道详解与使用AutoSSH实现稳定的内网穿透
一.前言 SSH 是一种建立在应用层基础上的安全协议,利用SSH进行数据传输时也是较为可靠和安全的.当有明文数据传输时,为保障其安全,可以利用SSH隧道对其进行加密安全传输,本文中讲到的SSH隧道用法 ...
最新文章
- Label中的自动换行
- 2高并发服务器:多线程服务器
- 太原理工微型计算机控制试卷,太原理工大学微机原理考试(13届葬仪落整理).docx...
- 巴菲特:马斯克是伟大企业家,但特斯拉股票不是好投资标的
- 操作系统知识点大总结【进程同步与互斥】
- [抄]外部奖励对内在动机的侵蚀
- 翻译成汉语的英文版书籍,为什么会薄很的原因
- 力扣-274 H 指数
- {MySQL数据库初识}一 数据库概述 二 MySQL介绍 三 MySQL的下载安装、简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 初识sql语句...
- linux centos erlang,CentOS 7.7安装Erlang和Elixir
- 爬虫抓图2022年全网最新方法,这一次终于是4k高清美图
- 设置计算机用户权限,计算机管理员权限在哪里设置_电脑系统如何设置管理员权限-win7之家...
- 書劍恩仇錄 (無線電視翡翠台版本) - 劇本終回由誰人敲定? 就是李添勝.
- 字符串常用方法(1)
- c语言什么事结构体,C语言结构体定义是什么
- 最短路(hdu2544,floyd最短路)
- (100天2小时第二十九天)几种常见的图像噪声及去噪处理算法
- 竞价排名中的道德争议
- JavaScript jq 三位分节法 input输入数字时每3位使用逗号隔开
- 《数据库原理与应用》(第三版)习题参考答案
热门文章
- suzhou jinjihu lake half round marathon
- 一个帮忙画logo的网站,这个我没试过,不过我觉得淘宝更便宜一些吧
- 基于长度特征的三文鱼好sea bass的区分,sesbass 比三文鱼长
- 龟兔赛跑的升级版本和在课业学习上的应用
- C# 【无法修改XX返回值,因为它不是变量】
- Linux rsync 命令参数详解
- 阿里云日志服务(ELK)
- SubSonic3.0.0.4.3源码包与调用Dll
- MonkeyRunner在Windows下的Eclipse开发环境搭建步骤(兼解决网上Jython配置出错的问题)...
- Font Awesome 完美的图标字体