一、ssh端口转发连接数据库
今天发现了一个好玩的功能,可以让ssh服务监听两个端口,利用ssh端口转发用这两个端口登录远程rac数据库。以前ssh服务都是监听一个端口,打开一个端口进行转发,没想到监听了多个端口。
为什么会这样呢?集团的***登录一直限制外网的1521端口和22端口,所以如果在家里使用这个接入平台,只能更改服务器的ssh端口。这个规定很讨厌。每次登录vcenter修改服务器的ssh端口,比如改成222。但是公司没有22个端口的限制。每次来公司,我都会把这个端口改回来。其实不改也可以。在xmanager上设置222端口是可以的,但是你可能不了解强迫症的心理。......
今天发现家里1521端口还是连不上公司数据库。TM这么多年了,还是鸟瞰。我们试试用ssh端口转发吧。
先说目的:因为公司禁止1521端口和22端口,所以不能直接ssh到两台rac服务器(当然可以修改rac服务器的ssh端口登录),也不能通过sqldeveloper连接实例。有一个222端口的跳机,可以ssh。所以我需要先ssh到跳线的端口222(这是允许的,很可能是一个漏洞),然后在这个跳线上设置一个ssh加密通道,将流量转发到两个目的地的端口1521。从跳转机到目的地没有端口限制。
拓扑如下所示:
跳汰机的 *** 作如下
ssh-10.0.0.0:65530:RAC-1:1521-N10.0.0.1-p222-f
在sqldeveloper上对其进行如下配置:
然后测试连接,OK,可以工作了。
之后,我连接到racdb2实例,但是在端口222上只能建立一个ssh通道。我该怎么办?sshd服务可以监听另一个端口吗?试试看:
Vim/etc/ssh/sshd_config
添加一行端口223,最终结果如下:
[root@SCD~]#grep-Iport/etc/ssh/sshd_config
端口222
端口223
然后重新启动sshd服务。
是的,netstat-ntplu|grep22发现真的还可以。
[root@SCD~]#netstat-ntplu|grep22
TCP0000000:22200000:*列表EN8802/sshd
TCP0000000:22300000:*列表EN8802/sshd
tcp00:::222:::*列表EN8802/sshd
tcp00:::223:::*列表EN8802/sshd
然后就可以开通第二转发通道了。
ssh-10.0.0.0:65531:RAC-2:1521-N10.0.0.1-p223-f
Sqldeveloper的配置如下:
最后的命令如下:
[root@SCD~]#moressh_port_forward.txt
ssh-10.0.0.0:65530:RAC-1:1521-N10.0.0.1-p222-f
ssh-10.0.0.0:65531:RAC-2:1521-N10.0.0.1-p223-f
[root@SCD~]#grep-Iport/etc/ssh/sshd_config
端口222
端口223
#禁用服务器中对新版本的传统(协议版本1)支持
#网关端口编号
二。ssh端口转发原理及实例
1、ssh端口转发原理
讲原理有点麻烦。让我们引用IBMdeveloperworks的一篇文章。
https://www.IBM.com/developerworks/cn/Linux/l-cn-sshforward/
这里就不赘述了。
我想说的是,我这里用的是本地型,也就是本地转发。我已经画出了两个命令的数据流。
这两个命令的数据流图如下
以第一个为例,第二个也一样:
客户端发起到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)
只是我的三台服务器合并成了一台设备,所以看起来我这里的命令有点奇怪,但是只要你知道数据流,就能熟练运用。
2、Ssh端口转发配置示例
以本次测试为例,拓扑图如下:
步骤0:在客户端的ssh10.0.0.1222和ssh10.0.0.1223上测试从客户端到跳转机器的连通性。它必须能连接,然后配置才有意义。
步骤1:向跳转机器添加以下两个命令
ssh-10.0.0.0:65530:RAC-1:1521-N10.0.0.1-p222-f
ssh-10.0.0.0:65531:RAC-2:1521-N10.0.0.1-p223-f
-L/-N/-f选项的含义,你可以自己去读。
步骤2:在跳线上修改sshd_config,添加2个允许ssh的端口,并重启sshd。
端口222
端口223
第三步:在跳线上的/etc/hosts中写入rac-1和rac-2的ip(如果不写,就不能在ssh命令中写入名称rac-1,需要写入rac-1的ip)
步骤4:在客户的计算机上使用sqldevelop或telnet进行测试:telnet10.0.0.165530。应该是有联系的。
3,音符
需要注意的是,我的跳线是redhat6.4系统,默认开启ssh的AllowTcpForwarding功能。如果配置ssh端口转发失败,请检查配置manshd_config,然后搜索allowtcpforwarding。在我的例子中,默认情况下它是打开的。记得打开配置。
防火墙和selinux我就不说了,直接关了。另外,可能有人会问,ip_forward是不是一定要打开。你怎么想呢?我这里只有一张网卡,可以转发一个球。默认net.ipv4.ip_forward=0。
去做吧。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)