简介

  • 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. 【转】在MyEclipse 8.6上搭建Android开发环境

    内容导航 第 1 页:基本环境准备 第 2 页:下载Android SDK 第 3 页:配置SDK环境变量 第 4 页:给MyEclipse安装ADT插件 第 5 页:配置MyEclipse 第 6 ...

  2. Python CGI apache在windows下安装

    1.首先去下载apache (http://httpd.apache.org/download.cgi)(Apache VC15 binaries and modules download) 2.下载 ...

  3. Python使用requests爬取一个网页并保存

    #导入 requests模块import requests #设置请求头,让网站监测是浏览器 headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 6. ...

  4. JVM系列七(JIT 即时编译器).

    一.概述 即时编译器(Just In Time Compiler),也称为 JIT 编译器,它的主要工作是把热点代码编译成与本地平台相关的机器码,并进行各种层次的优化,从而提高代码执行的效率. 那么什 ...

  5. cogs 247. 售票系统 线段树

    247. 售票系统 ★★☆   输入文件:railway.in   输出文件:railway.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 某次列车途经C个城市,城市 ...

  6. GitHub高级搜索指南

    还在为自学时找不到适合练手的项目而苦恼? 还在好奇别人是如何在GitHub众多项目中找到高质量代码的? 真的是因为他们独具慧眼吗? 不,其实他们只是掌握了正确的搜索方法. 下面介绍几种常用的GitHu ...

  7. MongoDB数据库备份和恢复

    1.数据库备份 mogodbdump -h dbhost -d dbname -o dbdirectory -h: 服务器地址,也可以指定端口号 -d: 需要备份的数据库的名称 -o: 备份的数据库存 ...

  8. java集合与数组之间转换

    数组转换为集合 采用java中集合自带的asList()方法就可以完成转换了 String[] array = new String[] {"zhu", "wen&quo ...

  9. python3小脚本-监控服务器性能并插入mysql数据库

    操作系统: centos版本 7.4 防火墙 关闭 selinux 关闭 python版本 3.6 mysql版本 5.7 #操作系统性能脚本 [root@localhost sql]# cat cp ...

  10. 玩转Django2.0---Django笔记建站基础十二(Django项目上线部署)

    第十二章 Django项目上线部署 目前部署Django项目有两种主流方案:Nginx+uWsGI+Django或者Apache+uWSGI+Django.Nginx作为服务器最前端,负责接收浏览器的 ...