SSH 本地、远程隧道

栏目: 服务器 · 发布时间: 4年前

内容简介:建立ssh隧道常用于, 通过一台公网的主机或者是大家都可以访问的主机做跳转机,来访问内部或者外部不能直接访问的机器.项目当前用途:由于服务端上假设架设的redis未设置加密, 因此通过防火墙了屏蔽redis端口(6379), 其他外网机器需要连接到该端口就可以使用ssh隧道建立端口转发绕过防火墙.

Last-Modified: 2019年6月5日15:45:11

简介

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

项目当前用途:

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

参考文章: https://www.cnblogs.com/fbwfb...

个人简单理解:

  • 本地隧道: 访问本地指定端口, 通过"中间机器"转发到"目标机器"的"目标端口", 方向是: 本地 -> 中间 -> 远程
  • 远程隧道: 远程访问"远程端口", 通过本机转发到目标机器的端口, 此时本机是作为代理, 远程 -> 本地 -> 目标

本地SSH隧道

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

# -N    不执行远程指令
# -f    后台执行ssh命令
# -L    local隧道, [bind_address:]port:host:hostport
# -4    强制使用ipv4地址

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

  • {目标机器} 若填 “127.0.0.1”, 则指的是直接转发到中间机器

    ssh -f -N -L 36901:127.0.0.1:3690 root@xx.xx.xx.xx 即建立ssh隧道, 本地访问36901端口时, 会被转发到 root@xx.xx.xx.xx 的3690端口

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

示例

SSH 本地、远程隧道

目的: A要访问C, 但被B屏蔽

手段: A通过D来间接访问C

# 以下命令都是在 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

示例

SSH 本地、远程隧道

利用 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.85.161
numprocs=1
autostart=true
autorestart=true
startretries=10
redirect_stderr=true
stdout_logfile=/data/tmp/supervisord/ssh_tunel_3690.log
supervisorctl update

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Algorithms for Image Processing and Computer Vision

Algorithms for Image Processing and Computer Vision

Parker, J. R. / 2010-12 / 687.00元

A cookbook of algorithms for common image processing applications Thanks to advances in computer hardware and software, algorithms have been developed that support sophisticated image processing with......一起来看看 《Algorithms for Image Processing and Computer Vision》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试