您当前的位置:首页 > 电脑百科 > 网络技术 > 网络技术

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

时间:2022-01-20 11:50:32  来源:  作者:冯大仙哈

一、前言

 

SSH 是一种建立在应用层基础上的安全协议,利用SSH进行数据传输时也是较为可靠和安全的。当有明文数据传输时,为保障其安全,可以利用SSH隧道对其进行加密安全传输,本文中讲到的SSH隧道用法均可以保障安全传输,文中不详做介绍,本文着重讲解除安全传输之外的其他使用场景,来分别分析三种SSH隧道的用法。

 

文中会用到以下SSH参数,先看一下man文档中对以下SSH参数的解释:

-L port:host:hostport

将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-R port:host:hostport

将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-D port

指定一个本地机器 “动态的” 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去,根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, ssh 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.

-N

不执行远程命令. 用于转发端口. (仅限协议第二版)

-f

要求 ssh 在执行命令前退至后台. 它用于当 ssh 准备询问口令或密语, 但是用户希望它在后台进行. 该选项隐含了 -n 选项. 在远端机器上启动 X11 程序的推荐手法就是类似于 ssh -f host xterm 的命令.

-g

允许远端主机连接本地转发的端口.

 

二. 本地转发

 

1.功能解释

本地转发即在A服务器执行ssh命令登录B服务器来启用SSH隧道,以实现通过访问A服务器的转发端口,达到实际访问为B服务器的目标端口的目的。如下图所示:

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

 

2. 使用场景

当客户端可以访问主机A的任意端口,但由于网络或安全的原因客户端无法访问到主机B的任意端口。如果现在客户端想要访问主机B的某个服务时(如MySQL数据库),此时只要主机A可以访问到主机B的SSH端口,这里就可以使用SSH隧道,实现客户端访问主机A的转发端口即可访问到主机B的mysql数据库。

 

3. 命令示例

 

以下命令均在A主机执行:

 

SSH登录后启用ssh隧道,但仅监听A主机127.0.0.1地址,退出ssh登录后隧道断开

ssh -L A转发port:B主机IP:B目的端口 root@B主机

 

SSH命令后不登录B主机,仅启用ssh隧道,仅监听A主机127.0.0.1地址,关闭A主机终端后隧道断开

ssh -N -L A转发port:B主机IP:B目的端口 root@B主机

 

SSH命令后不登录B主机,仅启用ssh隧道,仅监听A主机127.0.0.1地址,关闭A主机终端后隧道不会断开

ssh -f -N -L A转发port:B主机IP:B目的端口 root@B主机

 

指定A主机中ssh隧道转发端口绑定的网卡

ssh -f -N -L A主机IP:A转发port:B主机IP:B目的端口 root@B主机

 

将转发端口绑定至A主机所有网卡

ssh -g -f -N -L A转发port:B主机:B目的端口 root@B主机

 

三、远程转发

 

1. 功能解释

上面我们知道了本地转发是在A服务器执行ssh命令后将转发端口设置在A服务器本身,远程转发则相反,是将转发端口设置在ssh命令的目标服务器上。

远程转发即在B服务器执行ssh命令登录A服务器来启用SSH隧道,以实现通过访问A服务器的转发端口,达到实际访问为B服务器的目标端口的目的。如下图所示:

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

 

2. 使用场景

远程转发使用场景较为广泛且实用。

如果我们在家庭电脑上跑了一个Tomcat服务并想提供到互联网访问,由于家庭电脑一般是通过路由器来访问互联网的(即在nat网络中),我们需要在家庭路由器中进行端口映射来实现。

如果我们是公共路由器没有权限怎么办?又或者在权限管控严格的公司中我们没有权限怎么办?

巧合的是,我们手上还有一台拥有公网IP的主机(如阿里云主机等),我们的家庭电脑是可以访问到互联网的(即可以SSH访问到拥有公网IP的主机),直接使用SSH隧道就可以解决以上问题。

 

3. 命令示例

以下命令均在B主机执行:

 

SSH命令后不登录A主机,仅启用ssh隧道,仅监听A主机127.0.0.1地址,关闭B主机终端后隧道不会断开

ssh -f -N -R A主机转发端口:B主机IP:B目的端口 root@A主机

 

看到这里,你一定会联想到以下两条指令来实现绑定到非lookback地址:

ssh -f -N -R A主机IP:A主机转发端口:B主机IP:B目的端口 root@A主机

ssh -g -f -N -R A主机转发端口:B主机IP:B目的端口 root@A主机

 

不过当你实验时敲下以下指令,会发现A主机的SSH隧道监听地址仍然是127.0.0.1,这又是为什么呢?

 

4. 将远程转发绑定到网卡

上一小节我们尝试建立远程转发隧道后,仅监听127.0.0.1地址,这是因为在SSH服务的配置文件/etc/ssh/sshd_config中有这样一个配置

GatewayPorts 是否允许远程主机连接本地的转发端口,默认值为 no。

 

将此项配置为yes并重启SSH服务后,再次执行命令

ssh -f -N -R A主机转发端口:B主机IP:B目的端口 root@A主机

这时远程转发的转发端口会设置在A主机的所有网卡上,即0.0.0.0

 

当然除了这种方法,我们还可以使用其他技术手段来实现允许其他主机访问A主机127.0.0.1地址的转发端口,例如在A主机用其他程序去反向代理127.0.0.1的转发端口,使用Nginx反代实现方式和配置可以点开我的主页,查看《Nginx实现socket代理》这篇文章。

 

四、 动态转发

1. 功能解释

动态转发即通过配置一个本地端口,将通过隧道的数据转发到目标端地址网络。

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

 

如上图所示,动态转发不像本地转发与远程转发一样转发端口与目标端口是一对一的,动态转发中的转发端口对应的目标是目标主机所在的整个网络。不过使用动态转发访问目标主机所在网络时需要应用程序本身支持代理配置或者使用socket代理工具。

 

2. 使用场景

同样如上图所示,如果存在一个子网1与子网2之间设有防火墙,主机A只能访问到主机B的ssh端口,这时如果主机A或者外部客户端想要访问子网2中的任意IP的任意端口时,可以使用动态转发隧道实现。

 

3. 命令示例

以下命令均在A主机执行:

 

SSH命令后不登录B主机,仅启用ssh隧道,仅监听A主机127.0.0.1地址,关闭A主机终端后隧道不会断开

ssh -f -N -D A主机转发端口 root@A主机

 

SSH命令后不登录B主机,仅启用ssh隧道,监听A主机指定网卡IP地址,关闭A主机终端后隧道不会断开

ssh -f -N -D A主机IP地址:A主机转发端口 root@A主机

 

4. 客户端代理配置

当隧道创建好之后我们需要通过代理客户端进行设置之后才会使用隧道,如果应用程序支持配置直接配置即可,如果是不支持配置代理的应用程序可以使用到socket代理工具来搭配使用,我常用的客户端代理工具是Proxifier,关于用法可以参考我主页的另一篇文章《Socket代理神器客户端Proxifier+服务端ss5》。

 

五、AutoSSH

在实际的使用过程中,如果使用远程转发穿透到内网,ssh隧道将会非常不稳定,隧道会莫名其妙的消失或者失效,特别是在没有固定IP的网络内,本章节讲解使用AutoSSH进行稳定的远程转发。

 

1. 下载安装

①下载地址

https://www.harding.motd.ca/autossh/autossh-1.4g.tgz

②解压

tar zxvf autossh-1.4g.tgz

③预编译

cd autossh-1.4g

./configure

④编译

make

编译完成后当前目录下会生成autossh这个文件。

⑤至此,autossh安装完成,将authssh文件拷贝到任意目录执行即可使用。

也可以将autossh文件拷贝到环境变量$PATH中的目录即可实现在任意目录下直接访问autossh。

 

2. 参数解释

AuthSSH只有三个自己的参数:

-M <port>[:echo_port] 指定要使用的基本监控端口,或者指定要使用的监控端口和回显服务端口。

-f 使 autossh 在运行 ssh 之前进入后台。注意在autossh中使用到此参数将不会提示输入密码,所以使用此参数需要先配置好公钥登录。

-V 查看版本号。

 

3. 配置公钥登录

若未配置过公钥登录的朋友可以点开我的主页,参考《SSH登录流程及配置公钥登录》这篇文章。

 

4. 使用autossh进行远程转发

在B主机执行命令

AutoSSH命令后不登录A主机,关闭B主机终端后隧道不会断开

autossh -M 10000 -f -N -R A主机转发端口:B主机IP:B目的端口 root@A主机

 

5. 验证稳定性

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

 

使用autossh命令后,autossh会打开另一个ssh进程创建隧道,我们尝试kill14837进程后,再次ps查看进程时发现autossh立即又打开了另一个ssh进程创建了隧道,并且测试隧道使用正常。

 

参考:

朱双印个人日志《ssh端口转发:ssh隧道》

 

写在最后:

如有错误,请评论告知,多多包涵,谢谢!



Tags:内网穿透   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、前言 SSH 是一种建立在应用层基础上的安全协议,利用SSH进行数据传输时也是较为可靠和安全的。当有明文数据传输时,为保障其安全,可以利用SSH隧道对其进行加密安全传输,本文...【详细内容】
2022-01-20  Tags: 内网穿透  点击:(24)  评论:(0)  加入收藏
什么是cpolar?cpolar是一种安全的内网穿透云服务,它将内网下的本地服务器通过安全隧道暴露至公网,使得公网用户可以正常访问内网服务。 它能用在哪些场景? 微信公众号开发,实时断...【详细内容】
2021-12-31  Tags: 内网穿透  点击:(32)  评论:(0)  加入收藏
# 1. nps-npc1.1 简介nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh...【详细内容】
2021-12-22  Tags: 内网穿透  点击:(41)  评论:(0)  加入收藏
FRP 内网穿透需求背景最近小王公司接个对接公众账号应用开发的项目,其中有个功能需求是"用户关注公众账号后发送特定消息后公众账号需要回复一个二维码海报“。了解需求后,便...【详细内容】
2021-09-22  Tags: 内网穿透  点击:(61)  评论:(0)  加入收藏
1. 前言大家好,我是安果!一提到远程桌面,可能大家都会想到 TeamViewer、向日葵等第三方软件但是,它们大多是商业化软件,价格昂贵;即使有提供免费版本,也是各种限制,稳定性和安全性...【详细内容】
2021-09-16  Tags: 内网穿透  点击:(82)  评论:(0)  加入收藏
本文使用 docker 方式部署, 使用 windows 客户端首先 拉取镜像docker pull ffdfgdfg/nps下载 conf文件夹 并解压,或前往项目主页自行下载项目首页: https://ehang-io.github.i...【详细内容】
2021-07-14  Tags: 内网穿透  点击:(202)  评论:(0)  加入收藏
钉钉美图前言最近有一个小需求【调试远程python代码,超方便pycharm教程】需要用到内网穿透,然后自己搜到了【最强内网穿透工具frp】。然后看网友评论里面有推荐【傻瓜式-Web面...【详细内容】
2021-06-18  Tags: 内网穿透  点击:(1850)  评论:(0)  加入收藏
很多开发者在开发个人项目的前期,可能都会遇到没有公网域名或者公网IP,导致调试受限的问题。虽然,购买一个服务器,注册一个域名,很便宜,也很简单,但是如果能通过免费的内网穿透工具...【详细内容】
2021-05-25  Tags: 内网穿透  点击:(205)  评论:(0)  加入收藏
一、工具介绍Chisel可用来搭建内网隧道,类似于我们常用的花生壳和ngrok。由于目前使用的人比较少,因此对于有些杀软还不能准确的识别出该工具。chisel可以进行端口转发、反向...【详细内容】
2021-04-02  Tags: 内网穿透  点击:(322)  评论:(0)  加入收藏
今天给大家出个外网访问内网畅捷通软件的教程。相信大家都知道,在没有公网ip的情况下,我们是没办法在外网访问内网的应用的;这时候应该怎么办?我们今天就用闪库内网穿透来解决这...【详细内容】
2020-11-23  Tags: 内网穿透  点击:(142)  评论:(0)  加入收藏
▌简易百科推荐
合理配置信道宽度如前两期微信所述,WiFi可以使用不同的信道宽度。通常信道宽度越大,一次可以发送的数据越多,耗用的信号传播时长就越少。802.11b/g标准仅支持传统的20MHz信道...【详细内容】
2022-01-27    计算机世界  Tags:WiFi提速   点击:(2)  评论:(0)  加入收藏
Tracert简介 Tracert是测试报文从发送端到目的地所经过的路由的方法。它能够直观展现报文在转发的时候所经过的路径。Tracert基于ICMP协议来实现的。当网络出现故障时,用户可...【详细内容】
2022-01-26  郭主任    Tags:tracert   点击:(1)  评论:(0)  加入收藏
在一片漆黑的界面下,我们该如何查看和配置系统网卡、IP地址、路由等信息呢?最传统基本的网络命令,几乎所有旧的发行版都支持的配置命令:ifconfig查看系统的所有网卡及IP配置信息...【详细内容】
2022-01-21  乐观的钢铁大侠    Tags:网络命令   点击:(16)  评论:(0)  加入收藏
一、前言 SSH 是一种建立在应用层基础上的安全协议,利用SSH进行数据传输时也是较为可靠和安全的。当有明文数据传输时,为保障其安全,可以利用SSH隧道对其进行加密安全传输,本文...【详细内容】
2022-01-20  冯大仙哈    Tags:内网穿透   点击:(24)  评论:(0)  加入收藏
功能说明:1、实现局域网设备互相发现2、实现右键快速发送到3、传输速度,进度显示4、支持托盘显示项目语言:c#(winform)功能实现原理:局域网内各主机之间通过upd互相发现,客户端启...【详细内容】
2022-01-20  演员的专业素养    Tags:局域网   点击:(15)  评论:(0)  加入收藏
无线wifi摄像头怎样可以远程监控?对于远程监控,你可以这样理解,凡是需要经过服务器上传或者云平台上传的监控摄像机都是可以远程的。不管是利用什么媒介,比如无线WiFi,4G传输,移动...【详细内容】
2022-01-17  速名网    Tags:wifi摄像头   点击:(15)  评论:(0)  加入收藏
访问共享夹文件时,提示“引用的帐户当前已锁定,且可能无法登录”,说什么“可能”,明明就已经无法访问了啊,那究竟是服务器的高冷拒绝,还是客户端的厚颜无耻理应被关在门外呢?且听我...【详细内容】
2022-01-14  IT狂人日志    Tags:共享文件   点击:(12)  评论:(0)  加入收藏
随着互联网的发展,现在家家户户基本上都离不开WIFI了,有时候咱们走到一家商店之后,首先就是问一下网络的密码,仿佛离开的网络,生活就已经无法自理了一样。更何况现在手机或者是平...【详细内容】
2022-01-14  贺鑫聊生活    Tags:网速   点击:(22)  评论:(0)  加入收藏
wifi正常的话,说明路由器和外网是成功连接的,电脑无法上网的问题是出在路由器和电脑之间。我们可以通过硬件和软件两方面按顺序排查问题,以windows 11为例。硬件原因造成的连接...【详细内容】
2022-01-10  寻一枚青叶    Tags:无法上网   点击:(28)  评论:(0)  加入收藏
可以造成家庭有线宽带、WiFi网速慢的原因有很多,这里拂晓简单帮大家罗列一些常见现象和排除故障的方法供大家参考(小白版)。(1)确定入户网络质量。首先,我们确保运营商网络质量是...【详细内容】
2022-01-10  科技壹周谈  搜狐号  Tags:网速   点击:(20)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条