SSH: ssh隧道

简介

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。SSH隧道是SSH技术的扩展,可以将其看作一条加密隧道。本文将介绍它的几种用法,其中我在工作中用的最多的是将其作为跳板机的加密通道,在jenkins调用ansible部署和 jumpserver https://www.cnblogs.com/William-Guozi/p/jumpserver.html 网域中均有应用,也即是,所有底层基于ssh的技术均可使用该隧道技术。其优点是提高数据传输的安全性(数据加密和隐藏主机公网地址)和管理的方便性,所谓管理的方便性,即所有主机均通过内网IP访问,不用记忆和管理外网地址,好处多多。

SSH Local 模式

语法

ssh -C -f -N -g -L listen_port:DST_Host:DST_port user@Tunnel_Host

范例

逻辑图如下:

img-w500

在B主机上执行下面命令C.ip为C主机的IP地址,B主机将监听在12340端口

ssh -C -f -N -g -L 12340:C.ip:22 [email protected]

在A主机上执行下面命令,可直接登录C主机

ssh -p 12340 root@B.ip

参数注解

相关参数的解释: 
-f Fork into background after authentication. 
后台认证用户/密码,通常和-N连用,不用登录到远程主机。

-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 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.

-C Enable compression. 
压缩数据传输。

-N Do not execute a shell or command. 
不执行脚本或命令,通常与-f连用。

-g Allow remote hosts to connect to forwarded ports. 
在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。注:这个参数我在实践中似乎始终不起作用。

SSH Remote 模式

语法

ssh -C -f -N -g -R listen_port:DST_Host:DST_port user@Tunnel_Host

范例

逻辑图如下:

img-w500

在B主机上执行下面命令,C主机将监听在12340端口

ssh -C -f -N -g -R 12340:localhost:22 root@C.ip

在A主机上执行下面命令,可直接登录B主机

ssh -p 12340 root@C.ip

SSH dynamic 模式

语法

ssh -C -f -N -g -D listen_port user@Tunnel_Host

范例

逻辑图如下:

img-w500

在C主机上执行下面命令,C主机将监听在12340端口

ssh -C -f -N -g -D 12340 [email protected]

作为客户端A需要配置浏览器代理配置,下图需要填写C的ip地址

img-w500

此刻会发现自己的公网IP为C的ip了,就可以科学上网了

img-w500

SSH在跳板机中的应用

在当前用户的根目录下添加如下配置,就可以实现直接内网访问,当前本公司的项目发布就是采用jenkins调用ansible的方式,而ansible底层为ssh。
即从该主机上访问172.16.0.0/16的网段就会通过与跳板机1建立的通道传输,访问172.31.16.0/24、172.31.17.0/24网段会通过与跳板机2建立的通道传输。

配置如下:

cat >> /root/.ssh/config <<"EOF"
##aliyun beijing
Host 172.16.*.*
  ProxyCommand ssh -p 22 -W %h:%p root@***跳板机1公网IP***
#指定私钥的位置
  IdentityFile /root/.ssh/id_rsa

##Aliyun huadong
#如果是多段IP,可以用空格隔开
Host 172.31.16.* 172.31.17.*
  ProxyCommand ssh -p 22 -W %h:%p root@***跳板机2公网IP***
  IdentityFile /root/.ssh/id_rsa

EOF

参考文档

猜你喜欢

转载自www.cnblogs.com/William-Guozi/p/ssh_tunnel.html