我正在尝试使用ssh隧道连接连接到远程服务器,我必须使用从本地服务器到远程服务器的端口转发。然后我需要能够连接到远程服务器上的mysql数据库。
我正在使用tSshTunnel组件,该组件在其他系统中工作正常,但在我的系统和远程连接中抛出错误为“javax.crypto.ShortBufferException:无法在输出缓冲区中存储MAC”。
我搜索了很多但无法在任何地方找到解决方案。
任何帮助将不胜感激。提前致谢。
经过几天的测试和研究,我得出了一个结论 - 为了帮助处于相同情况的其他人,下面将提供一个完整的指南,介绍如何通过应用程序上的SSH隧道连接到Amazon RDS服务器(EC2) )服务器,这是Elastic Beanstalk所做的。
使用Windows命令提示符手动连接到服务器:
这是基于我在this article about SSH connections on the terminal发现的。 ssh命令不仅能够连接到目标服务器,还能够通过第一个服务器连接到第二个服务器。这是它的工作原理:
ssh -L 3307:databaseServer.rds.amazonaws.com:3306 -i myPemFile.pem [email protected]
这个命令正在做的是:'ssh通过端口22(默认)连接到我的应用服务器,并将每个请求绑定到databaseServer:3306到我的本地机器的localhost:3307端口'
保持此命令窗口不变,打开一个新窗口并写入:
mysql -u "databaseUserName" -P 3307 -p"databasePassword"
这样就显示了mysql提示符。您现在通过与应用程序服务器的SSH连接将MySQL命令发送到数据库服务器。现在,本地(您自己的机器)端口3307使用应用程序服务器作为代理绑定到数据库服务器。
在Talend Open Studio中安装tSshTunnel以进行数据集成
在Talend的市场中找到的插件(我正在使用Talend TOS 7.1.1)没有显示在Palette菜单中,因此我将tSshTunnel.zip文件解压缩到文件夹~\TOS_DI-20181026_1147-V7.1.1\plugins\org.talend.designer.components.localprovider_7.1.1.20181026_1147\components\tSshTunnel
返回Talend Studio,按CTRL SHIFT F3重新加载组件或重启TOS。
tSshTunnel中的错误以及如何规避它
针对具体问题:Amazon RDS数据库链接通常很长(例如ktofbf83428349cntdfg.clus33245kfur.us-west-2.rds.amazonaws.com),并且“无法存储MAC”消息的原因显然是这个巨大的输入大小。但是,该插件接受等效的ec2-xx.xx.xx.xx.us-west-1.compute.amazonaws.com网址。可以使用ipinfo等工具跟踪此URL。只需在那里输入你的数据库链接,你就会得到相应的ec2风格的链接(它解决了用户的问题)。
关于Amazon RDS用例的tSshTunnel使用的一般说明
为了使答案尽可能广泛,我想添加一些配置细节: