内容简介:建立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}
示例
目的: 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
示例
利用 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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
如何构建敏捷项目管理团队
丽萨·阿金斯 / 徐蓓蓓、白云峰、刘江华 / 电子工业出版社 / 2012-6 / 49.00元
《敏捷项目管理系列丛书•PMI-ACPSM考试指定教材•如何构建敏捷项目管理团队:ScrumMaster、敏捷教练与项目经理的实用指南》结合作者的亲身经历告诉读者如何建立一个高性能的敏捷项目管理团队,以及最终成为一名优秀的敏捷教练。作者将敏捷教练定义为导师、协助者、老师、问题解决者、冲突领航员、协作指挥者,正是这种不同角色之间的细微区别才使敏捷教练的工作富有深度。《敏捷项目管理系列丛书•PMI-A......一起来看看 《如何构建敏捷项目管理团队》 这本书的介绍吧!