Secure SHell (SSH) 是一个通过网络登录其他计算机的程序,在远程服务器运行命令,和从一台机器移动文件到另一台。在不安全的网络中,它提供两台主机之间强大认证和安全加密的的通讯,被称为 SSH Port Forwarding (Tunneling)。通常情况下,它是使用为一个 Telnet 的加密版本。

在一个 Telnet 阶段作业,全部的通讯,包括用户名和密码,会用纯文本传输,让任何人都能监听你的阶段作业及窃取密码或其他信息。这种阶段作业也容易受到阶段作业劫持,一旦你验证,恶意用户就能接管这种阶段作业。SSH 的目的是防止这种漏洞,并允许你在不影响安全性的情况下访问远程服务器的 shell。

SSH 通道的好处

SSH 有一个极好功能叫做 SSH Port Forwarding,有时也被称为 SSH 通道,它允许你创建一个安全的阶段作业,然后通过它打开随心所欲的 TCP 连接。通道可以随时创建,几乎不需要任何努力及编程,这令到它们非常有吸引力。在无数不同的方式,SSH Port Forwarding 可以用于安全通信。

许多提供服务器讬管的讬管公司会封锁讬管公司网络以外访问服务器,以及只授予访问給本机(localhost)用户连接。

使用 SSH 的多个好处:

@当服务器端口被封锁时,连接到使用了防火墙的服务器。

@自动验证用户,没有发送纯文本的密码,以防止窃取密码。

@多个强大的认证方法,防止安全威胁如欺骗的身份。

@安全和快速的加密和压缩数据。

@安全文件传输。

为确保进来的连接请求是由你发出,SSH 能够使用密码,或公开及私钥对(也称为公钥)验证机制。

@密码验证。

@公钥验证。

注意:请确保在Linux 服务器的参数 -「AllowTcpForwarding」设置值为「yes」,否则,会禁用 SSH port forwarding。要查找路径:/etc/ssh/sshd_config。在默认情况下,SSH port forwarding 应该已启用。请仔细检查该值的设置。

** 即使服务器支持 SSH 通道,然而,如果 port forwarding 被禁用,Navicat 就无法通过 SSH 端口 22 连接。

1.


SSH: Port Forwarding
1.正向隧道-隧道监听本地port,为普通活动提供安全连接
ssh -qTfnN -L port:host:hostport -l user remote_ip
2.反向隧道----隧道监听远程port,突破防火墙提供服务
ssh -qTfnN -R port:host:hostport -l user remote_ip
3.socks代理
SSH -qTfnN -D port remotehost(用证书验证就直接主机名,没用的还要加上用户名密码)
-q Quiet mode. 安静模式,忽略一切对话和错误提示。
-T Disable pseudo-tty allocation. 不占用 shell 了。
-f Requests ssh to go to background just before command execution. 后台运行,并推荐加上 -n 参数。
-n Redirects stdin from /dev/null (actually, prevents reading from stdin). -f 推荐的,不加这条参数应该也行。
-N Do not execute a remote command. 不执行远程命令,专为端口转发度身打造。

2.


ssh实现转发, 只要用到以下两条命令: 

# ssh -CfNg -L 6300:127.0.0.1:1521 oracle@172.16.1.164
# ssh -CfNg -R 1521:127.0.0.1:6300 oracle@172.16.1.164 不论是做跳板, 还是加密隧道, 还是加密其他的网络连接也都是这两条命令. 视具体情况而定, 有时只要用到其中一条, 有时两条都要用到.  命令解释:  1) -CfNg C表示压缩数据传输
f表示后台用户验证,这个选项很有用,没有shell的不可登陆账号也能使用.
N表示不执行脚本或命令
g表示允许远程主机连接转发端口 2) -L 本地转发 # ssh -CfNg -L 6300:127.0.0.1:1521 oracle@172.16.1.164 本机(运行这条命令的主机)打开6300端口, 通过加密隧道映射到远程主机172.16.1.164的1521端口(使用远程主机oracle用户). 在本机上用netstat -an|grep 6300可看到. 简单说,本机的6300端口就是远程主机172.16.1.164的1521端口.  3) -R 远程转发 # ssh -CfNg -R 1521:127.0.0.1:6300 oracle@172.16.1.164 作用同上, 只是在远程主机172.16.1.164上打开1521端口, 来映射本机的6300端口.  4) 实用例子 有A,B,C 3台服务器, A,C有公网IP, B是某IDC的服务器无公网IP. A通过B连接C的80端口(A<=>B<=>C), 那么在B上执行如下命令即可:  $ ssh -CfNg -L 6300:127.0.0.1:80 userc@C
$ ssh -CfNg -R 80:127.0.0.1:6300 usera@A 服务器A和服务器C之间, 利用跳板服务器B建立了加密隧道. 在A上连接127.0.0.1:80, 就等同C上的80端口. 需要注意的是, 服务器B上的6300端口的数据没有加密, 可被监听, 例:  # tcpdump -s 0-i lo port 6300

新建一个ssh代理:

ssh -CfNg -L 6000:127.0.0.1:22 root@120.18.28.28

本机6000代理到远程22.

运行命令后可用看到有进程:

tcp        0      0 0.0.0.0:62667               0.0.0.0:*                   LISTEN      27449/ssh

测试是否可用

ssh -p 6000  root@localhost -v

如果不可用会报错,常见的错误有:

ssh_exchange_identification: Connection closed by remote host

这个说明远程主机名单设置有问题。

securecrt连接:

新建一个连接:

这里的ip是你跳板机的ip,端口是你设置的ssh转发端口6000,

在连接中选择“Connection” -> "Port Forwarding",选择“add...”添加一条新的转发规则

然后选择“OK”,要想配置生效,需要关闭当前连接重新连一次,此时,只要该连接处于连接状态,所有本地(127.0.0.1)2222的请求都会通过跳板机(150.236.223.72)转发至内网服务器(10.170.67.234)的22端口。

http://blog.sina.com.cn/s/blog_48f9c0840100tp5h.html

http://my.oschina.net/zencodex/blog/387581

http://www.cnblogs.com/wangkangluo1/archive/2011/06/29/2093727.html

http://blog.csdn.net/a19881029/article/details/40081983

Python实现运维堡垒机(跳板机)系统   http://www.linuxidc.com/Linux/2014-08/105793.htm

ssh tunnel通道的更多相关文章

  1. navicat链接阿里云mysql报80070007: SSH Tunnel: Server does not support diffie-hellman-group1-sha1 for keyexchange

      http://www.jianshu.com/p/200572ed066c navicat 链接数据库 使用navicat 的ssh通道连接数据库回遇到权限问题 错误代码如下: 80070007: ...

  2. SSH Tunnel扫盲(ssh port forwarding端口转发)

    SSH的的Port Forward,中文可以称为端口转发,是SSH的一项非常重要的功能.它可以建立一条安全的SSH通道,并把任意的TCP连接放到这条通道中.下面仔细就仔细讨论SSH的这种非常有用的功能 ...

  3. [原创]SSH Tunnel for UDP

    SSH Tunnel for UDP UDP port forwarding is a bit more complicated. We will need to convert the packet ...

  4. 通过ssh tunnel连接内网ECS和RDS

    通过ssh tunnel连接内网ECS和RDS 这里讲了ssh tunnel的原理.很清晰. 此后又给外网访问内网增加了一种思路.感觉特别棒. 拓宽了思路:

  5. 2016-12-14 - SSH Tunnel

    2016-12-14 - SSH Tunnel ssh Network Topo Network Topo A: Internet sshd B: NAT sshd C: NAT B Create S ...

  6. windows SSH Tunnel实施日记

    1.准备条件:SSH跳板服务器一个.软件:Putty,CCProxy 2.putty建立SSH Tunnel:先在session那儿把服务器地址填好,到Tunnel界面上,选Dynamics和Auto ...

  7. Navicat 或者Java的JDBC通过SSH Tunnel连接MySQL数据库

    JDBC通过SSH Tunnel连接MySQL数据库 - 明明 - CSDN博客https://blog.csdn.net/a351945755/article/details/21782693 Na ...

  8. 使用ssh tunnel 来做代理或跳板

    接前文 http://www.cnblogs.com/piperck/p/6188984.html  使用ssh config配置文件来管理ssh连接 前文说了如何配置自己的ssh config 来方 ...

  9. Navicat---使用SSH远程连接到MySql,报错80070007: SSH Tunnel: Server does not support diffie-hellman-group1-sha1 for keyexchange

    尝试使用Navicat远程连接到我在阿里云服务器上的MySql,通过SSH. 但是报错: 80070007: SSH Tunnel: Server does not support diffie-he ...

随机推荐

  1. functional cohesion

    Computer Science An Overview _J. Glenn Brookshear _11th Edition A weak form of cohesion is known as ...

  2. ant

    condition逻辑判断: <project name="testCondition"> <target name="test"> & ...

  3. correctly handle PNG transparency in Win IE 5.5 & 6.

    function correctPNG() // correctly handle PNG transparency in Win IE 5.5 & 6. { var arVersion = ...

  4. Bootstrap 表格和按钮

    一.表格 1.条纹状表格 行产生一行隔一行加单色背景效果 注:表格效果需要基于基本格式.table <table class="table table-striped"> ...

  5. 低功耗蓝牙4.0BLE编程-nrf51822开发(6)-Battery Service

    Battery Service是有关电池特性方面的服务,如果需要它,在初始化时将它加入到蓝牙协议栈. 如果通过ble_bas_battery_level_update(),电池电量将会通知,Batte ...

  6. iOS简单排序--字母排序、NSDictionary排序

    // 数组用系统方法compare做字母的简单排序 NSArray *oldArray = @[@"bac",@"bzd",@"azc",@ ...

  7. hive中关于数据库与表等的基本操作

    一:基本用法 1.新建数据库 2.删除数据库 3.删除非空的数据库 4.指定数据库的位置 LOCATION:指定数据库的位置,不会在系统的默认文件下. 5.在指定数据库中新建表(验证在指定的数据库中可 ...

  8. jQuery插件之Wookmark瀑布流

    使用方法: 1.下载wookmark.js 2.构建html <div class="wrapper"> <div id="con1_1"&g ...

  9. C/C++程序编译流程(预处理->编译->汇编->链接)

    程序的基本流程如图: 1. 预处理 预处理相当于根据预处理指令组装新的C/C++程序.经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内 ...

  10. 其他常用HTML 片段

    1.input placeholder 文字居中 字体大小+上下padding值等于设计稿宽度 设计稿中总高度为86px   padding:27px 0;font-size:30px;   2.英文 ...