用ssh端口转发功能访问远程服务器 转
现在的系统一般都需要数据库,如oracle或者sybase,为了安全考虑,数据库一般建在内网的某台机器上,而数据库的端口也不能直接暴露在防火墙外。为了支持现场工作,家里需要访问数据库时,一般的作法是先用远程桌面登录到现场的某台装有客户端的机器,再打开客户端访问数据库,这种办法最直接,但很不方便,首先是网速的限制,刷新画面有时候非常慢,另一个不方便的地方是,有可能这台装客户端的机器有多个人同时要用,这时候互相之间很有可能要打架了。如果现场有能直接访问的linux服务器,就可以用ssh的端口转发功能来访问数据库。
?
首先,现场需要有一台linux服务器,而且打开ssh服务,当然这台服务器的22端口要在防火墙上配置成能被外网访问到,或者这台服务器本身就是接口服务器。
另外,你本地的机器需要有用于ssh登录的软件(比如说SecureCRT),而且需要能访问到现场那台linux服务器。
最后,当然你得有数据库客户端。
linux服务器我们取名叫A,
内网的数据库服务器我们取名叫B。
?
我们用SecureCRT来举例说明ssh的端口转发功能,当然其它软件应该也有类似功能,这就需要你自己研究一下了。
首先,在SecureCRT里建立一个普通会话,用ssh连接到A,如果不会建立会话,请参考软件手册,或者联系我。
然后,想办法得到数据库的服务端口,比如oracle一般是1521,sybase一般是5000,下面用oracle的1521端口作例子。
接着,打开SecureCRT刚刚建立的会话的属性,
能看到对话框左边有个Port Forwarding,点开后在右边点击Add...
?
此主题相关图片如下:
在弹出的对话框里填这几样东东:
Name: 随便写个名字,这里是oracle
Local下面的Port:填入本地将建立的服务端口,这里是1521跟远程的一样(后面会解释这个端口)
Remote下面把Destination host is different from the SSH server前的勾打上,
Remote下面Hostname:填入B的IP,比如10.8.20.10
Remote下面的Port:填入数据库服务器的服务端口,这里是1521(如果跟本地端口一样,一般会自动填上不用改)
最后点OK确定。?
?
此主题相关图片如下:
?
再点OK确定,这时我们的工作已经完成一半了,剩下的就是数据库客户端的设置了,在这之前先解释一下前面设置的两个端口分别是干什么的。
前面看到设置的时候有两个端口,一个是Local,一个是Remote。
Remote:指的就是远程数据库的服务端口,这很好理解,这个端口肯定得设置。
Local:指的是在本地,SecureCRT将开一个监听端口,通过ssh,将所有在这个端口上收到的消息,转发到远程数据库的服务端口。
此主题相关图片如下:
?
所以,客户端设置的时候,只要把数据库地址设置成localhost,或者127.0.0.1就可以了,端口则设置成上面我们设置的Local下面的端口,如果不会设置,找会的人问下,或者google一下,或者参考手册。
?
好了,设置完成,让我们来试着连接一下,如果SecureCRT的会话在修改属性后还没重连过,现在断开。
首先,连接修改过属性的会话,连上A。
然后,打开数据库客户端,选择刚刚建立的数据库设置连上,好了,如果顺利,你现在打开的就是现场数据库了。
?
提醒一下,如果用这种方式打开数据库,必须保持ssh连接,因为所有的数据是通过ssh连接发送的。
当然这种方法不止限于数据库,大部分内网的服务都可以用这种方式来访问,比如说内网的远程桌面,试一下,这个功能远比你想象的好用。
1 楼 skzr.org 2011-01-05 A机器的ssh无法直接访问,内网的ubuntu server的ssh已经安装了,不知道ssh的反向连接是啥?