隧道原理

隧道是一种把一种网络协议封装进另外一种网络协议进行传输的技术。这里我们研究ssh隧道,所以所有的网络通讯都是加密的。又被称作端口转发,因为ssh隧道通常会绑定一个本地端口,所有发向这个端口端口的数据包,都会被加密并透明地传输到远端系统。

隧道的类型

ssh隧道有3种类型:
  • 动态端口转发(Socks 代理)
  • 本地端口转发
  • 远端端口转发

ssh端口转发常用选项

-N #告诉SSH客户端,这个连接不需要执行任何命令。仅仅做端口转发
-f #告诉SSH客户端在后台运行
-L #本地转发
-R #远程转发
-D #动态转发
-C #数据压缩

动态端口转发

主机名 IP地址
A 111.111.111.111
B 111.111.111.112
C 192.168.0.4,91.85.113.211
D 102.168.0.1/24

假设A只能访问B,B只能访问C,C能访问所有,那么我们要从A访问C和D就只需要在B和C之间做一个动态转发,就可以把B作为代理来用,这样只要能访问B的机器都可以用B来设置代理。如果只想B本机本地使用代理,则本地地址绑定只需要设置为127.0.0.1

在B机器上执行如下代码开启动态转发

ssh -f -N -D 0.0.0.0:1080 vaedit@91.85.113.211 #如果配置了秘钥则无需输入,如果没秘钥则需要输入密码验证
#本地代理
ssh -f -N -D localhost:1080 vaedit@91.85.113.211

注意点

如果主机C的ssh默认端口不是22,那我们需要在代理机上的.ssh/config目录中设置port=4521来实现设置默认连接端口
保持长时间连接:
有些路由器会把长时间没有通信的连接断开。SSH客户端的TCPKeepAlive选项可以避免这个问题的发生, 默认情况下它是被开启的。
如果它被关闭了,可以在ssh的命令上加上-o TCPKeepAlive=yes来开启。

本地端口转发

使用场景
假设X网络(192.168.18.0/24)有主机A(192.168.18.100),
Y网络(192.168.2.0/24)有主机B(192.168.2.100)和主机C(192.168.2.101),
已知主机A可以连接主机B,但无法连接主机C。A主机需要访问C主机的VNC服务(5900端口)
在A主机上建立本地转发端口5901
ssh -L 5901:192.168.2.101:5900 root@192.168.2.100
然后本地vnc客户端通过5901端口打开c主机的vnc服务
open vnc://localhost:5901

通过SSH隧道,将一个远端机器能够访问到的地址和端口,映射为一个本地的端口。

命令格式:

ssh -L 本地端口:远程主机地址:远程主机开放端口 中转主机地址

示例:

ssh -L 1314:192.168.4.113:80 192.168.4.101 -Nf
#当访问本机的1314的端口时,被加密后转发到192.168.4.101的ssh服务,再解密被转发到192.168.4.113:80

优点:无需设置代理

缺点:每个服务都需要配置不同的端口转发

注意点

共享这个本地端口转发需要加上-g参数,或者在sshd_config中添加GatewayPorts yes并重启sshd服务


远程转发

使用场景

主机名 ip地址
A 192.168.0.17
B 95.169.18.91
C 98.142.141.59

注意点 \
A机器处于在层层NAT之下的内网;B机器拥有公网IP(称为IpB),可以被任意机器直接访问;A机器希望将本地端口PortA映射到B机器的端口PortB上,使得任何人访问B机器PortB端口等效于访问A机器的PortA端口。配置方法B机器配置要求B机器能够运行sshd之类的可以进行ssh登录的软件。ssh的配置要添加:GatewayPorts=yes,AllowTcpForwarding=yes然后清理掉所有ssh的会话进程,重启ssh服务。如果不是用的root用户建立隧道,那么在B机器上只能监听本地127.0.0.1端口。

需求说明

A机器处于在层层NAT之下的内网;B机器拥有公网IP(称为IpB),可以被任意机器直接访问;A机器希望将本地端口PortA映射到B机器的端口PortB上,使得任何人访问B机器PortB端口等效于访问A机器的PortA端口。

配置方法

B机器配置:

要求B机器能够运行sshd之类的可以进行ssh登录的软件。ssh的配置要添加:
GatewayPorts yes,AllowTcpForwarding yes.然后清理掉所有ssh的会话进程,重启ssh服务

这样使得B机器可以启用0.0.0.0的监听地址,否则B机器只能监听来自127.0.0.1的地址。

A机器配置

ssh的命令参数如下。也在-R前可以添加-C -f -N -g,使得ssh程序在后台运行。

ssh -R 0.0.0.0:PortB:127.0.0.1:PortA root@IpB
#具体案例:
ssh -fN -g -R 0.0.0.0:1027:127.0.0.1:22  root@95.169.18.91

然后在B机器上运行如下命令,即可检验是否生效。

netstat -lnp | grep PortB

这样就实现了需求的功能,即访问PortB等效于访问PortA,在C上执行

ssh root@95.169.18.91 -p 1027 #即可连接到A机器的22端口,即实现了A端口22到B端口1027的映射

转载于:https://blog.51cto.com/vaedit/2379616

Linux-ssh隧道详解相关推荐

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

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

  2. Linux ssh命令详解,连ssh命令都不了解就别说自己会用Linux了

    前言 ssh相当于windows上的远程桌面连接,但没有桌面,只有文字终端.ssh是许多Linux使用者入门时必学的一个命令.借助ssh,开发人员可以很方便地连接远程或是局域网的其他电脑,直接在上面进 ...

  3. Linux -ssh登录 详解

    一.什么是SSH? 简单说,SSH是一种网络协议,用于计算机之间的加密登录. 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会 ...

  4. linux ssh命令详解

    选项: -l login_name  指定登入于远程机器上的使用者,若没加这个选项,而直接打 ssh lost 也是可以的,它是以读者目前的使用者去做登入的动作. 例如: ssh –l shie mo ...

  5. SSH Tunnel隧道详解

    SSH Tunnel隧道详解 ssh tunnel分为三种 本地 -L 远程 -R 动态 -D 参考:https://blog.csdn.net/chenjh213/article/details/4 ...

  6. SSH服务详解(一)–Linux SSH 服务器与客户端的安装与启动

    SSH服务详解(一)–Linux SSH 服务器与客户端的安装与启动 SSH服务详解(一)–Linux SSH 服务器与客户端的安装与启动 SSH服务详解(二)–使用私钥登录 SSH 服务器(免密登录 ...

  7. linux ifconfig 命令详解

    linux ifconfig 命令详解 功能说明:显示或设置网络设备. 语 法:ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址&g ...

  8. 红帽Linux故障定位技术详解与实例(1)

    红帽Linux故障定位技术详解与实例(1) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍 ...

  9. linux防火墙ddos,Linux iptables防火墙详解 + 配置抗DDOS***策略实战

    Linux iptables防火墙详解 + 配置抗DDOS***策略实战 Linux 内核中很早就实现了网络防火墙功能,在不同的Linux内核版本中,使用了不同的软件实现防火墙功能. 在2.0内核中, ...

  10. 红帽Linux故障定位技术详解与实例(3)

    红帽Linux故障定位技术详解与实例(3) 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行各种 ...

最新文章

  1. 【怎样写代码】确保对象的唯一性 -- 单例模式(五):一种更好的单例实现方法(静态内部类)
  2. 【 MATLAB 】序列运算之序列移位的函数实现
  3. input的onkeyup效果 超级简短代码
  4. dede标签用法(来源网页)
  5. c# 再次尝试 连接失败_[图]连接USB或者SD卡的PC将阻止升级Windows 10 May 2019功能更新...
  6. noip模拟赛 都市
  7. 统计与自适应信号处理_时间序列分析 自协方差/自相关系数/偏自相关系数
  8. 可视化工具sqlyog连接MySQL数据库
  9. 如何使用idea自带的数据库可视化工具
  10. 触屏java版象棋下载 游戏下载安装_中国象棋官方版下载
  11. 微信公众号支付开发流程
  12. 《亲密关系》读书笔记
  13. 黑苹果10.14.5安装WebDriver驱动nvidia独立显卡
  14. tf.flags用法
  15. php 色彩空间转换,PHP Imagemagick将灰度转换为RGB
  16. windows 电脑图片/视频不展示预览图
  17. Bit blit----From Wikipedia
  18. 【shell】scp 同时向多个主机拷贝数据
  19. opencv-python图片的镜像
  20. tensorflow的GPU加速计算

热门文章

  1. 我把皮小浪の的 蓝色妖姬系列做进了java窗口
  2. java 正斜杠与反斜杠之分
  3. 君正 Halley6 开发板调试SPI LCD
  4. html5 video首次观看禁止快进,Video Speed Controller - 快进/后退/回看在线视频
  5. 量子计算机每次秒可达多少次,激光脉冲让运算速度提升百万倍 量子计算机有望实现室温运行...
  6. 用计算机录音并播放教学设计,八年级信息技术《录制声音》说课稿
  7. 从计数器逻辑中揭秘神奇的HDL
  8. DIY强大的虚拟化环境-规划思路框架
  9. 51单片机12864坐标轴显示,并实时刷新数proteus实现
  10. SCI回复评审意见模板