如果EC2实例是MSSQL计算机,我需要通过AWS EC2实例访问公司防火墙后面的MSSQL计算机。出于我们的目的,我将EC2实例称为“中间人”节点。
我计划使用SSH隧道执行此操作(如果您知道更好的解决方案,请告诉我。)
这就是我们所拥有的:
我需要通过中间节点连接到MSSQL机器(例如通过SQLWorkbenchJ或JDBC连接)。目标是访问中间节点 AS IF 它是企业防火墙背后的MSSQL机器。
首先,我要在互联网上访问中间人节点。最后,我计划使中间人节点只能访问由AWS Data Migration Service配置的复制EC2实例。
这是中间人/ etc / ssh_config文件的内容:
cat /etc/ssh_config
TCPKeepAlive yes
ClientAliveInterval 240
ClientAliveCountMax 99999
GatewayPorts yes
我多次重启中间人EC2实例。
MSSQL机器无法直接访问Internet,我们必须通过终端机进行访问。
在终端机器上(运行Windows 2008和Cygwin),我跑了:
nohup ssh -i /cygdrive/c/Sync/middleman.pem -f -N -R 14330:private_hostname_of_mssql_machine:1433 ec2-user@public_hostname_of_middleman_machine
在中间人节点(运行AWS Linux和mssql cli)上,我遇到 NO 问题:
mssql -s localhost -o 14330 -u username -p password -d database_name
在此阶段我没有遇到任何问题。我可以通过mssql工具访问SSH shell中的中间节点上的MSSQL服务器,没有任何问题。
但是,我无法在笔记本电脑上与中间节点建立连接:
mssql -s public_hostname_of_middleman_machine -o 14330 -u username -p password -d database_name
我收到的错误信息是:
Error: Failed to connect to public_hostname_of_middleman_machine:14330 - connect ECONNREFUSED ip_of_middleman_machine:1433
我已经检查过了 - mssql可以在Internet上联系中间人机器的主机名(否则会返回“getaddrinfo ENOTFOUND”错误)。由于其他原因,该连接被拒绝。
我需要使用AWS DMS复制MSSQL数据库,并且需要复制服务器指向中间人节点(我无法直接建立到复制服务器的反向SSH隧道)