简介

  • 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. 什么是 Google Play服务

    Google Play服务用于更新Google应用和Google Play提供的其他应用. 此组件可提供多种核心功能,例如对您的Google服务进行身份验证.同步联系人信息.提供最新的用户隐私设置,以 ...

  2. 如何修改Docker已运行实例的端口映射

    如何修改Docker已运行实例的端口映射 Docker的端口映射,往往出现在两个阶段需要处理: 1.是在docker启动前就已经确定好,哪个docker实例映射哪个端口(往往这个情况比较,需要提前做规 ...

  3. 【Java并发基础】并发编程领域的三个问题:分工、同步和互斥

    前言 可以将Java并发编程抽象为三个核心问题:分工.同步和互斥. 这三个问题的产生源自对性能的需求.最初时,为提高计算机的效率,当IO在等待时不让CPU空闲,于是就出现了分时操作系统也就出现了并发. ...

  4. must appear in the GROUP BY clause or be used in an aggregate function

    今天在分组统计的时候pgsql报错 must appear in the GROUP BY clause or be used in an aggregate function,在mysql里面是可以 ...

  5. 云资源中的低成本战斗机——竞价实例,AWS、阿里云等六家云厂商完全用户使用指南

    云端资源价格 预留实例:长期持有,批发路线,价格最便宜. 按需实例:即买即用,零售路线,价格最贵. 这两种资源,基于不同区域/价格的六家云厂商价格对比,连同原始数据文档我们已经打包成了一份电子文档,有 ...

  6. Pandas的介绍与基本使用

    1.什么是Pandas 当大家谈论到数据分析时,提及最多的语言就是Python和SQL,而Python之所以适合做数据分析,就是因为他有很多强大的第三方库来协助,pandas就是其中之一,它是基于Nu ...

  7. mysql时间类型和格式转换

    内容目录 简介mysql时间类型DATE_FORMAT()函数 简介 今天开发中,做一个功能需要对历史数据进行补充,相信大家也遇到过这样的情况,这个历史数据需要按月份和人的id进行区分,于是想到了my ...

  8. 点分治 (等级排) codeforces 321C

    Now Fox Ciel becomes a commander of Tree Land. Tree Land, like its name said, has n cities connected ...

  9. django 调试工具 django-tool-bar

    这里介绍一个好用的Django调试工具-django-tool-bar,主要用来调试性能,检测sql耗时,页面渲染耗时,是优化必备良器. 安装 下载 pip install django-debug- ...

  10. 线程上下文类加载器ContextClassLoader内存泄漏隐患

    前提 今天(2020-01-18)在编写Netty相关代码的时候,从Netty源码中的ThreadDeathWatcher和GlobalEventExecutor追溯到两个和线程上下文类加载器Cont ...