场景描述:
有一台拥有公网IP的服务器,提供SSH服务,端口22,可远程连接;该服务器拥有多网卡,配有内网IP;
从数据安全角度内网的Oracle未提供公网服务,但SSH服务器所在内网端可以访问数据库服务器;
现在需要访问数据库服务器,进行数据操作,首先想到的方法:在SSH服务器上安装Oracle客户端,使用SQL*PLUS访问数据库;或者使用一些第三方数据库管理客户端;
无论是使用Oracle客户端还是第三方数据库管理端,都涉及到软件的安装、配置,这都有可能对现有机器环境造成影响,而且还不一定有在SSH服务器上安装软件的权限,怎么办?
其实很多SSH客户端都提供端口转发功能,比如SecureCRT,就可以这么操作:
1,先用SecureCRT 建立一个会话,选择“选项” 中的 “会话选项”-> "连接"->“端口转发”
选择 【添加 】:
【名称】端口转发
【手工选择允许访问的本地 IP地址】 127.0.0.1
【端口】1521 (找一个本机并未使用的端口)
【远程】 ->【目的主机不同于SSH服务】填数据库的IP 地址
【端口】 填Oracle的监听端口 如1521
2,现在就可以用SecureCRT 连接刚才新建的会话了,连接上SSH
3,修改本机的ORACLE TNSNAMES.ORA,添加配置:
TNS_NAME =
(DESCRIPTION =
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) )
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
其中SERVICE_NAME 为数据库服务监听的真实SERVER_NAME
打开PL/SQL进行登录测试,成功!
整个流程:
PL/SQL--->127.0.0.1:1521---ssh -->SSH服务器---转发--->数据库服务器:1521
注:当前使用SecureCRT版本V6.2.3,不同版本可能会存在不同的配置选项名称