一、ssh端口转发连接数据库 今天发现了一个好玩的功能,让ssh服务监听2个端口,并且使用ssh端口转发用这两个端口登录远程的rac数据库。以前都是让ssh服务监听一个端口并且开一个端口转发,没想到可以监听多个端口。 为什么要这样呢?集团的vpn登录一直都限制1521端口、限制外网的22端口,所以如果在家用这个接入平台的话,就只能将服务器的ssh端口换一个,这个规则很讨厌,每次我都是登录到vcenter上修改服务器的ssh端口,例如改成222。但公司内部不限制22端口,每次到公司,我再把这个端口改回来。其实不改也行,在xmanager上设置222端口也是可以的,但你也许不明白强迫症人的心理...... 今天在家里发现还是无法连接公司数据库的1521端口,都TM这么多年了,还者鸟样,还是用ssh端口转发试一下吧. 我先说一下目的吧:因为公司禁止1521端口,禁止22端口,所以无法直接ssh到两台rac服务器(当然也可以修改rac服务器的ssh端口来登录上去),也无法通过sqldeveloper连接到实例。有一台跳转机开了222端口,可以ssh。所以我需要先ssh到跳转机的222端口(这个是允许的,估计也是个漏洞吧),之后在这台跳转机上建立个ssh加密通道,转发流量到2个目的地的1521端口。从跳转机到目的地是没有任何端口限制的。
拓扑如下:
在跳转机上操作如下 ssh -L0.0.0.0:65530:rac-1:1521 -N 10.0.0.1 -p 222 -f
在sqldeveloper上配置如下: 之后测试连接,OK,能够通。 之后连接racdb2实例,但222端口只能建立一个ssh通道,怎么办呢?让sshd服务再监听另外一个端口可以吗?试一下: Vim/etc/ssh/sshd_config 在添加一行Port 223,最终结果如下: [iyunv@scd ~]# grep-i port /etc/ssh/sshd_config Port 222 Port 223
之后重启sshd服务 Yes,netstat-ntplu|grep 22发现真的是OK的 [iyunv@scd ~]#netstat -ntplu|grep 22 tcp 0 0 0.0.0.0:222 0.0.0.0:* LISTEN 8802/sshd tcp 0 0 0.0.0.0:223 0.0.0.0:* LISTEN 8802/sshd tcp 0 0 :::222 :::* LISTEN 8802/sshd tcp 0 0 :::223 :::* LISTEN 8802/sshd
之后就可以打开第二个转发通道了 ssh -L0.0.0.0:65531:rac-2:1521 -N 10.0.0.1 -p 223 -f
Sqldeveloper配置如下:
最终的命令如下: [iyunv@scd ~]# moressh_port_forward.txt ssh -L0.0.0.0:65530:rac-1:1521 -N 10.0.0.1 -p 222 -f ssh -L0.0.0.0:65531:rac-2:1521 -N 10.0.0.1 -p 223 -f
[iyunv@scd ~]# grep-i port /etc/ssh/sshd_config Port 222 Port 223 # Disable legacy(protocol version 1) support in the server for new #GatewayPorts no 二、ssh端口转发原理与举例 1、ssh端口转发原理 原理讲起来有些麻烦,还是引用一篇IBM developerworks上的一篇文章吧, https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 我这里就不细说了。 我想说的是在我这里用的是local类型,也就是本地转发,我把两条命令的数据流向画了一下。 两条命令的数据流向图如下
以第一个为例,第二个相同: 客户端发起到10.0.0.1的65530端口的连接,10.0.0.1接收到数据后转到本地的222端口,实际上就是跳转机的65530端口和222端口建立了一条加密通道,之后10.0.0.1解密数据,在转发到rac-1这台服务器的1521端口。 实际上这里涉及到了3台服务器: 1、跳转机(65530端口的服务器) 2、和跳转机建立通道的另一端的服务器(222端口的服务器),没想好该叫什么,暂时就这么叫吧 3、目的地服务器(rac-1) 只是我这里3台服务器都合并成一台设备了,所以显得我这里的命令有些奇怪,但只要掌握了数据流向就可以熟练应用了。 2、Ssh端口转发配置举例 以这次的测试为例,拓扑图如下:
Step0:在客户的上ssh10.0.0.1 222和ssh 10.0.0.1 223测试客户端到跳转机的连通性,必须能够连通,之后的配置才有意义。
Step1:在跳转机上添加如下两条命令 ssh -L0.0.0.0:65530:rac-1:1521 -N 10.0.0.1 -p 222 -f ssh -L0.0.0.0:65531:rac-2:1521 -N 10.0.0.1 -p 223 -f -L/-N/-f选项的意义,自己man吧,应该都能读懂
Step2:在跳转机上修改sshd_config,添加2个允许ssh的端口,并重启sshd Port 222 Port 223
Step3:在跳转机上将rac-1和rac-2对应的ip写到/etc/hosts中(不写的话你在ssh命令中就不能写rac-1这个name了,你需要写rac-1的ip)
Step4:在客户的上用sqldevelop测试,或者用telnet测试:telnet10.0.0.1 65530。应该是可以连通的
3、注意事项 需要注意的一点是,我的跳转机是redhat6.4的系统,默认是打开ssh的AllowTcpForwarding功能的。如果你配置ssh端口转发不成功的话,不妨检查一下该项配置,man sshd_config,然后搜索allowtcpforwarding,就像我这里,默认是打开的。要记得打开该配置呀。
防火墙和selinux什么的我就不说了,关闭就行了。另外,有人可能会问ip_forward是不是必须要打开呀?你觉得呢?我这里就一块网卡,转发个球啊,默认的net.ipv4.ip_forward = 0 就行了。
|