简介

建立ssh隧道常用于, 通过一台公网的主机或者是大家都可以访问的主机做跳转机,来访问内部或者外部不能直接访问的机器.

项目当前用途:

由于服务端上假设架设的redis未设置加密, 因此通过防火墙了屏蔽redis端口(6379), 其他外网机器需要连接到该端口就可以使用ssh隧道建立端口转发绕过防火墙.

参考文章: https://www.cnblogs.com/fbwfbi/p/3702896.html

本地SSH隧道

ssh -Nf -L {本地端口}:{目标机器}:{目标端口} {中间机器}
# 或
ssh -Nf -L {本地地址}:{本地端口}:{目标机器}:{目标端口} {中间机器}

{本地地址}未配置, 则默认为 127.0.0.1, 即只有本机可以访问该转发端口

{中间机器} 可指定登陆的用户名 {user@xx.xx.xx.xx}

示例

# 以下命令都是在 192.168.0.100 上执行

# 从 192.168.0.100 通过 123.123.123.123 访问 234.234.234.234
ssh -N -f -L 2121:234.234.234.234:21 123.123.123.123
ftp localhost:2121 # 现在访问本地2121端口,就能连接234.234.234.234的21端口了
  • -N 告诉SSH客户端,这个连接不需要执行任何命令。仅仅做端口转发
  • -f 告诉SSH客户端在后台运行
  • -L 做本地映射端口,被冒号分割的三个部分含义分别是
    • 需要使用的本地端口号
    • 需要访问的目标机器IP地址(IP: 234.234.234.234)
    • 需要访问的目标机器端口(端口: 21)

最后一个参数是我们用来建立隧道的中间机器的IP地址(IP: 123.123.123.123)

-L X:Y:Z的含义是,将IP为Y的机器的Z端口通过中间服务器映射到本地机器的X端口。

远程SSH隧道

#
ssh -Nf -R {远程端口}:{本地机器}:{本地端口} {远程机器}
# 或
ssh -Nf -R {远程绑定地址}:{远程端口}:{本地机器}:{本地端口} {远程机器}
  • {本地机器} 不一定是本机, 也可以是局域网内与本机联通的主机, 任何访问{远程机器}:{远程端口}的都会被连接到 {本地机器}:{本地端口}, 执行上述命令的主机本质上是作为中转主机.
  • {远程绑定地址} 若不填写, 则默认是 127.0.0.1, 若要允许其他机器通过 {远程机器}:{远程端口} 来访问该隧道, 则可将该地址配置为 0.0.0.0(即{远程机器}上会监听来自 0.0.0.0:{远程端口} 的tcp连接

{远程机器} 记得将 sshd 的 GatewayPorts 打开

vim /etc/ssh/sshd_config
# GatewayPorts yes
service sshd reload

示例

利用 A(内网)-B-D 方向的连接 来建立 D-B-A方向的访问

# 在 192.168.0.100 上执行如下命令
ssh -Nf -R 2222:127.0.0.1:22 123.123.123.123 # 在远程 123.123.123.123 机器上执行如下命令即可连接到 A机器(192.168.0.100)的22端口
ssh -p 2222 localhost

-R 参数

  • 远程机器使用的端口(2222)
  • 需要映射的内部机器的IP地址(127.0.0.1)
  • 需要映射的内部机器的端口(22)

FAQ

免密码登陆

配置使用密钥连接

自动重连

隧道可能因为某些原因断开,例如:机器重启,长时间没有数据通信而被路由器切断等等。

可以通过配置 supervisord, 确保链接断开时自动重连, 但配置时应去掉 -f参数(不放在后台执行)

自动重连需配合"免密码登陆"

supervisord配置示例

[program:ssh_tunel_3690]
command=ssh -N -L 36901:127.0.0.1:3690 publisher@123.59.xx.xx
numprocs=1
autostart=true
autorestart=true
startretries=10
redirect_stderr=true
stdout_logfile=/data/tmp/supervisord/ssh_tunel_3690.log
supervisorctl update

[原创]SSH 隧道转发的更多相关文章

  1. 公司内网Debian Server上的openvpnserver搭建并通过SSH隧道转发到广域网

    因为戴维营公司在长沙的学员,研发人员和北京的研发人员须要协同研发,故须要让北京的兄弟们增加到长沙办公室的内网,訪问版本号 管理server,于是採用在内网server上搭建一个OpenVPN服务,并把 ...

  2. ssh 隧道

    SSH 隧道转发实战   大家都知道SSH是一种安全的传输协议,用在连接服务器上比较多.不过其实除了这个功能,它的隧道转发功能更是吸引人.下面是个人根据自己的需求以及在网上查找的资料配合自己的实际操作 ...

  3. SSH: ssh隧道

    简介 Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境.SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接. ...

  4. ssh隧道(端口转发)

    本地转发: ssh -Nf -L [bind_address:]port:host:hostport sshServer -Nf 后台运行 -L 本地转发 [bind_address] 绑定本地地址, ...

  5. SSH隧道技术----端口转发,socket代理

    原文的原始出处不详,本文也是在复制引用了某篇转载,并做了必要的整理与编辑. 本文的受众 如果你遇到了以下问题,那么你应该阅读这篇文章 我听说过这种技术,我对它很感兴趣 我想在家里访问我在公司的机器(写 ...

  6. SSH隧道:端口转发功能详解

    SSH系列文章: SSH基础:SSH和SSH服务 SSH转发代理:ssh-agent用法详解 SSH隧道:端口转发功能详解 1.1 ssh安全隧道(一):本地端口转发 如下图,假如host3和host ...

  7. 【译】SSH隧道:本地和远程端口转发

    本文是:SSH Tunnel - Local and Remote Port Forwarding Explained With Examples 的译文 有两种方法可以创建SSH隧道,本地和远程端口 ...

  8. Linux SSH隧道技术(端口转发,socket代理)

    动态转发(SOCKS5代理): 命令格式:ssh -D <local port> <SSH Server> ssh -fnND 0.0.0.0:20058 172.16.50. ...

  9. 流量操控之SSH隧道与端口转发

    目  录 第1章            概述... 3 1.1.         实现命令... 3 1.2.         SSH隧道类型... 3 第2章            SSH隧道... ...

随机推荐

  1. Linux grub命令

    一.简介 GNU GRUB(GRand Unified Bootloader简称"GRUB")是一个来自GNU项目的多操作系统启动程序.GRUB是多启动规范的实现,它允许用户可以在 ...

  2. java 主类的main方法调用其他方法

    方法1:A a=new test().new A(); 内部类对象通过外部类的实例对象调用其内部类构造方法产生,如下: public class test{ class A{ void fA(){ S ...

  3. 命令: go build

    命令: go build 参考: https://studygolang.com/articles/9463 go help build 构建编译由导入路径命名的包,以及它们的依赖关系,但它不会安装结 ...

  4. 微信小程序进行地图导航使用地图功能

    之前我写过的文章当中,提过小程序的打包大小.所以特地去下载一个区域的地图的这种方法,是不存在的. 我用的导航主要使用的是应用外的导航,这篇文章可能对于非常熟悉小程序的小伙伴来说就是小case,所以只适 ...

  5. unittest单元测试框架之coverage代码覆盖率统计

    什么是coveage? coverage是一个检测单元测试覆盖率的工具,即检查你的测试用例是否覆盖到了所有的代码.当你通过pip install coverage成功安装完coverage后,就会在p ...

  6. MySQL性能调优与架构设计——第1章 MySQL 基本介绍

    第1章 MySQL 基本介绍 前言:作为最为流行的开源数据库软件之一, MySQL 数据库软件已经是广为人知了. 但是为了照顾对MySQL还不熟悉的读者,这章我们将对 MySQL 做一个简单的介绍.主 ...

  7. Java Web系列:Java Web 项目基础

    1.Java Web 模块结构 JSP文件和AXPX文件类似,路径和URL一一对应,都会被动态编译为单独class.Java Web和ASP.NET的核心是分别是Servlet和IHttpHandle ...

  8. centos7怎能开机设置文本界面

    rm -f /etc/systemd/system/default.target 设置命令行级别方法:ln -sf /lib/systemd/system/runlevel3.target /etc/ ...

  9. vs2015上使用github进行版本控制

    我是用的是vs2015企业版 一.首先创建项目,右下角选择新建git存储库 二.在工具栏选择团队-管理连接,打开团队资源管理器,点击同步 . 三.选择下面的发布选项 四.在gitgub上新建仓库,得到 ...

  10. .Net core 2.0的数据初始化

    在StartUp.cs里面,添加Seed方法 public static void Seed(IApplicationBuilder applicationBuilder) { using (var ...