博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【资料整理】ssh端口转发
阅读量:6458 次
发布时间:2019-06-23

本文共 1983 字,大约阅读时间需要 6 分钟。

【资料整理】ssh端口转发

【端口转发】

http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/

-C    是进行数据压缩,

-f    是后台操作,只有当提示用户名密码的时候才转向前台。

-N    是不执行远端命令,在只是端口转发时这条命令很有用处。

-g    是允许远端主机连接本地转发端口。

      在主流 SSH 实现中,本地端口转发绑定的是 lookback 接口,这意味着只有 localhost 或者 127.0.0.1 才能使用本机的端口转发 , 其他机器发起的连接只会得到“ connection refused. ”。好在 SSH 同时提供了 GatewayPorts 关键字,我们可以通过指定它与其他机器共享这个本地端口转发。

      ssh -g -L <local port>:<remote host>:<remote port> <SSH hostname>

-R    是将远端主机端口映射到本地端口。

-L    是将本地端口映射到远端主机端口。

-D    是动态转发,其实在这里 SSH 是创建了一个 SOCKS 代理服务。

      ssh -D <local port> <SSH Server>

server

A: IP:192.168.2.10,PORT:500,SSH端口:322

client

B: IP:192.168.2.20,PORT:7000

在A上生成ssh key,passphrase为空。

$ ssh-copy-id user1@192.168.2.20

在B上生成ssh key,passphrase为空。

$ ssh-copy-id user1@192.168.2.10

SSH 端口转发自然需要 SSH 连接,而 SSH 连接是有方向的,从 SSH Client 到 SSH Server 。而我们的应用也是有方向的,比如需要连接 LDAP Server 时,LDAP Server 自然就是 Server 端,我们应用连接的方向也是从应用的 Client 端连接到应用的 Server 端。如果这两个连接的方向一致,那我们就说它是本地转发。而如果两个方向不一致,我们就说它是远程转发。

1)如果这两个连接的方向一致,那我们就说它是本地转发

ssh -L <local-port>:<remote-host>:<remote-port>

本地转发在本地这台机器上监听一个端口,然后所有访问这个端口的数据都会通过ssh 隧道传输到远端的对应端口上

在B上执行:

ssh -p 322 -N -f -L 7000:127.0.0.1:500 user1@192.168.2.10

主机B上的应用发送数据到本地7000端口->

主机B上的SSH Client将7000端口收到的数据加密并转发到主机A上的SSH Server(192.168.2.10)上->

主机A上的SSH Server解密数据并转发到本地的500端口

2)而如果两个方向不一致,我们就说它是远程转发。(反向连接)

ssh -R listen-port:host:port

远程转发与本地转发正好相反,打开ssh隧道以后,在远端服务器监听一个端口,所有访问远端服务器指定端口都会通过隧道传输到本地的对应端口上

在A上执行:

ssh -p 322 -N -f -R 7000:127.0.0.1:500 user1@192.168.2.20

主机B上的应用发送数据到本地7000端口->

主机B上的SSH Server将7000端口收到的数据加密并转发到主机A上的SSH Client(192.168.2.10)上->

主机A上的SSH Client解密数据并转发到本地的500端口

例如:

在A上执行:

ssh -NfR 10065:127.0.0.1:10050 zabbix@192.168.2.20

主机B上的zabbix server发到本地10065端口请求zabbix数据->

主机B上的SSH Server将10065端口收到的数据加密并转发到主机A上的SSH Client(192.168.2.10)上

主机A上的SSH Client解密数据并转发到本地的10050端口

3)多主机转发

APP Client(A) ->(非加密)-> SSH Client(C) ->(加密)->  SSH Server(D) ->(非加密)->  APP Server(B)

在C上面执行:

ssh -g -L 7000:<B>:500 <D>

在A上面访问C的7000端口即可

本文转自 pcnk 51CTO博客,原文链接:http://blog.51cto.com/nosmoking/1595648,如需转载请自行联系原作者

你可能感兴趣的文章
深度 | 机器学习敲门砖:任何人都能看懂的TensorFlow介绍【转】
查看>>
leveldb学习:DBimpl
查看>>
MySQL存储引擎--MYSIAM和INNODB引擎区别
查看>>
[Recompose] Stream Props to React Children with RxJS
查看>>
打印图片
查看>>
apache 配置
查看>>
SHOW CREATE DATABASE Syntax
查看>>
mysql 视图
查看>>
Spring <context:annotation-config/> 说明
查看>>
lua
查看>>
Java排序算法(四):Shell排序
查看>>
poj_3468 伸展树
查看>>
Linux ag命令
查看>>
【BZOJ】3495: PA2010 Riddle
查看>>
windows执行命令来运行loadrunner录制好的脚本(收藏)
查看>>
Linux automake命令
查看>>
Linux使用jstat命令查看jvm的GC情况
查看>>
CareerCup All in One 题目汇总
查看>>
xmind 使用备忘
查看>>
Atitit.java jar hell解决方案-----Djava.ext.dirs in ide envi..
查看>>