简介

  • 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

范例

逻辑图如下:

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

ssh -C -f -N -g -L 12340:C.ip:22 root@0.0.0.0

在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

范例

逻辑图如下:

在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

范例

逻辑图如下:

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

ssh -C -f -N -g -D 12340 root@0.0.0.0

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

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

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

参考文档

SSH: ssh隧道的更多相关文章

  1. 利用SSH反向隧道,连接内网服务器

    前言 公司有一台文件服务器(内部使用,无外网IP),上面主要安装了SVN服务,用来存储和共享各部门的文档,因为都是内网,直接远程(mstsc)上去就可以方便维护,但最近公司租了新的办公室,部分员工被分 ...

  2. SSH实现隧道功能穿墙

    Putty和SSH tunnel 目前寻求FQ的方式无非就几种: 寻找web代理(这个可以进我放置的在线代理进行测试) 自行寻找http/sock5代理(这个可以去网上搜索代理ip) vpnFQ(目前 ...

  3. 【Linux】ssh建立隧道tunnel连接到内网设备

    root@192.168.1.105 建立隧道: ssh -l root -N -f -R 9103:127.0.0.1:2222 work@11.11.13.17 解析:把本地127.0.0.1:2 ...

  4. 两步建立 ssh 反向隧道

    因为需要在寝室访问实验室的内部网络,刚好自己购买了阿里云,因此,可以远端干活了,mark下方法: 第一步:在内网的服务器上,使用ssh 命令建立反向隧道 publicUserName@publicIp ...

  5. 在Mac OSX下使用ssh建立隧道(在Windows下建立隧道可以使用putty,其间会用到ppk文件)

    在Windows下建立隧道可以使用putty,其间会用到ppk文件.在Mac OSX下,同样的功能可以用ssh命令实现.具体是: ssh -D 8088 -Nf user@ip -i myppk.ss ...

  6. linux命令--ssh创建隧道

    工作应用场景 在工作中,总会连接到各种不能直接访问的环境,所以我们必须使用ssh隧道进行访问. 原理简介 ssh隧道:https://www.jianshu.com/p/20600c91e656

  7. 使用ssh建立隧道和web代理

    动态端口转发(socket4/5代理): 通过ssh监听本地端口并把数据转发至远程动态端口 转发local port 至 ssh Server ssh -D ssh -qfTnN -D 本地目标端口 ...

  8. [异常解决] windows用SSH和linux同步文件&linux开启SSH&ssh client 报 algorithm negotiation failed的解决方法之一

    1.安装.配置与启动 SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有 ...

  9. [SSH] SSH学习笔记 - 远程登录

    1.SSH登陆/登出命令 $ ssh <hostname> #登入 $ exit #登出 known_hosts 每个用户都有自己的known_hosts文件,路径:(username)/ ...

随机推荐

  1. 学会python正则表达式就是这么简单

    一前言 本篇文章带大家快速入门正则表达式的使用,正则表达式的规则不仅适用python语言,基本大多数编程语言都适用,在日常使用中极为广泛,读者们有必要学好正则表达式.看完这篇文章,读者们要理解什么是正 ...

  2. Spring AOP 基于AspectJ

    简介 AspectJ是一个基于Java语言的AOP框架,Spring2.0以后新增了对AspectJ切点表达式支持.因为Spring1.0的时候Aspectj还未出现; AspectJ1.5中新增了对 ...

  3. 3 分钟带你深入了解 Cookie、Session、Token

    经常会有用户咨询,CDN 是否会传递 Cookie 信息,是否会对源站 Session 有影响,Token 的防盗链配置为什么总是配置失败?为此,我们就针对 Cookie.Session 和 Toke ...

  4. 如何在ArcGIS中恢复注记文字

    文字标注是地图上一种特殊的视觉元素,可通过文字表达图形符号难以说明的地图内容,它与图形符号结合在一起存在于地图上,是关乎地图构图美的关键因素之一. MapGIS软件下子图对象和注释对象统统保存在点文件 ...

  5. bootstrap4popper.js报错Uncaught ReferenceError

    这是因为bootstrap4需要umd版的popper.js <script src="https://cdn.bootcss.com/popper.js/1.15.0/umd/pop ...

  6. 网络流学习 - dinic

    推荐博客:https://www.cnblogs.com/SYCstudio/p/7260613.html#4246029

  7. 字典树(增删改查 HDU 5687)

    度熊手上有一本神奇的字典,你可以在它里面做如下三个操作: 1.insert : 往神奇字典中插入一个单词 2.delete: 在神奇字典中删除所有前缀等于给定字符串的单词 3.search: 查询是否 ...

  8. Ansible Playbooks常用模块

    File模块 在目标主机创建文件或目录,并赋予其系统权限 - name: create a file file:'path=/oot/foo.txt state=touch mode=0755 own ...

  9. n-tier waf 41 project 层真够多

    ps: http://waf.codeplex.com/releases/view/618696

  10. Python学习,第五课 - 列表、字典、元组操作

    本篇主要详细讲解Python中常用的列表.字典.元组相关的操作 一.列表 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 通过下标获取元素 #先定义一个列表 le ...