假设你有这样一个需求:你在家中有一台 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 隧道管理个人计算机相关推荐

  1. 建立稳定安全的SSH隧道

    本文将教你如何通过 SSH 隧道把本地服务映射到外网,以方便调试,通常把这种方法叫内网穿透. 目的 把运行在本地开发机上的 SSH 服务(或其他服务如HTTP等)映射到外网,让全世界都能通过外网 IP ...

  2. SSH隧道 / SSH穿透

    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问.但我们一般都会在本地开发,因为这能快速的看到源码修改后的运行结果.但当涉及到需要调用微信接口时,由于不和你 ...

  3. Linux下使用Shell脚本实现反向ssh自动交互

    本文章简单介绍如何通过脚本实现反向ssh的登录,有了该脚本,可以实现反向ssh隧道的自动交互,该脚本可供其他应用程序直接调用,不需要用户手动触发,给使用者提供方便. 首先生成一份名为"aut ...

  4. 使用Xshell实现SSH隧道穿透

    最近公司开发项目遇到了一个非常蛋疼的事情!我们公司同时迁入了电信.移动.联通三家的百兆光纤网络,这样就产生一个蛋疼事情. A所使用的网络是电信网络,他是开发的了微信功能的服务的接口项目,给B和C提供所 ...

  5. ssh 隧道_SSH隧道介绍

    ssh 隧道 最近,我想设置一个从家用PC到笔记本电脑的远程桌面共享会话. 在阅读设置指南时,我遇到了ssh隧道技术. 尽管有很多关于该主题的文章,但我还是花了很多时间进行谷歌搜索,一些实验和几次Wi ...

  6. SSH隧道技术----端口转发,socket代理

    原文的原始出处不详,本文也是在复制引用了某篇转载,并做了必要的整理与编辑. 本文的受众 如果你遇到了以下问题,那么你应该阅读这篇文章 我听说过这种技术,我对它很感兴趣 我想在家里访问我在公司的机器(写 ...

  7. centos mysql ssh连接,使用SSH隧道连接MYSQL

    1. 概述 本文介绍了如何使用SSH隧道连接MySQL,网络隔离导致无法直接访问数据库的问题. 第2节对需求进行了简单的描述:第3节介绍了linux环境下,如何通过SSH隧道连接MySQL:第4节介绍 ...

  8. 利用反向SSH从外网访问内网服务器

    学院的服务器在学院的内网,出了学院就不能访问,在宿舍.家里学习很不方便没有服务器的话.之前一直用TeamViewer,但是用着不舒服.最近新找到一个办法,就是利用外网服务器以及反向SSH搭一条通道,使 ...

  9. SSH隧道详解与使用AutoSSH实现稳定的内网穿透

    一.前言 SSH 是一种建立在应用层基础上的安全协议,利用SSH进行数据传输时也是较为可靠和安全的.当有明文数据传输时,为保障其安全,可以利用SSH隧道对其进行加密安全传输,本文中讲到的SSH隧道用法 ...

最新文章

  1. Label中的自动换行
  2. 2高并发服务器:多线程服务器
  3. 太原理工微型计算机控制试卷,太原理工大学微机原理考试(13届葬仪落整理).docx...
  4. 巴菲特:马斯克是伟大企业家,但特斯拉股票不是好投资标的
  5. 操作系统知识点大总结【进程同步与互斥】
  6. [抄]外部奖励对内在动机的侵蚀
  7. 翻译成汉语的英文版书籍,为什么会薄很的原因
  8. 力扣-274 H 指数
  9. {MySQL数据库初识}一 数据库概述 二 MySQL介绍 三 MySQL的下载安装、简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 初识sql语句...
  10. linux centos erlang,CentOS 7.7安装Erlang和Elixir
  11. 爬虫抓图2022年全网最新方法,这一次终于是4k高清美图
  12. 设置计算机用户权限,计算机管理员权限在哪里设置_电脑系统如何设置管理员权限-win7之家...
  13. 書劍恩仇錄 (無線電視翡翠台版本) - 劇本終回由誰人敲定? 就是李添勝.
  14. 字符串常用方法(1)
  15. c语言什么事结构体,C语言结构体定义是什么
  16. 最短路(hdu2544,floyd最短路)
  17. (100天2小时第二十九天)几种常见的图像噪声及去噪处理算法
  18. 竞价排名中的道德争议
  19. JavaScript jq 三位分节法 input输入数字时每3位使用逗号隔开
  20. 《数据库原理与应用》(第三版)习题参考答案

热门文章

  1. suzhou jinjihu lake half round marathon
  2. 一个帮忙画logo的网站,这个我没试过,不过我觉得淘宝更便宜一些吧
  3. 基于长度特征的三文鱼好sea bass的区分,sesbass 比三文鱼长
  4. 龟兔赛跑的升级版本和在课业学习上的应用
  5. C# 【无法修改XX返回值,因为它不是变量】
  6. Linux rsync 命令参数详解
  7. 阿里云日志服务(ELK)
  8. SubSonic3.0.0.4.3源码包与调用Dll
  9. MonkeyRunner在Windows下的Eclipse开发环境搭建步骤(兼解决网上Jython配置出错的问题)...
  10. Font Awesome 完美的图标字体