如何使用 AWS 私钥将本地应用程序(即 ruby​​mine、prosequel)连接到远程服务器?

如何使用 AWS 私钥将本地应用程序(即 ruby​​mine、prosequel)连接到远程服务器?

允许远程连接的程序(通常在 ssh 中)通常要求输入用户名/密码来连接到远程服务器:请参见以下示例续集红宝石矿, 分别:

续集优点:尝试通过 ssh 连接到远程 mysql 服务器:

连接窗口 sequelpro

Rubymine:尝试进行服务器端调试: 连接配置窗口 ruby​​time

借助亚马逊 AWS,使用 SSH 连接您需要一个私钥,连接命令如下:

ssh -i %privateKeyFileName.pem% ubuntu@server

问题:我如何包含这个私人文件才能使用 prosql 或 ruby​​mine 等应用程序成功连接?


更新:sequel pro 可以做到天生地.. 至于 ruby​​mine.. 我开始做ssh 隧道..因此步骤如下:

第一的:我在我的机器上启动了一个 ssh 隧道进程,这样对我的 localhost:9999 端口的任何请求都将被转发到端口 3000 的 aws ip:

ssh -l ubuntu -i '/path/to/cert/file/certFile.cer' -L 9999:%aws.ip%:3000 %aws.ip%

第二:下列的这些说明..我捆绑了贬低使用我的 rails 项目调试 gem..并运行以下命令:

rdebug-ide --port 3000 -- rvmsudo thin start -p 3000 -e production

第三:我更改了 ruby​​mine 中的生产调试设置,并使其指向本地主机的端口 3000,如下所示:

在此处输入图片描述

第四:我从 ruby​​mine 启动了调试过程。

问题:调试过程已启动..但它告诉我无法连接到 mysql 服务器:

/Users/abdullahbakhach/.rvm/rubies/ruby-1.9.3-p484/bin/ruby -e at_exit{sleep(1)};$stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) /Users/abdullahbakhach/.rvm/gems/ruby-1.9.3-p484/gems/ruby-debug-ide-0.4.17/bin/rdebug-ide --port 58053 --dispatcher-port 58054 -- /Users/abdullahbakhach/dev/ruby/icars-web-application-veritopia/script/rails server -b 0.0.0.0 -p 9999 -e production
Fast Debugger (ruby-debug-ide 0.4.17, ruby-debug-base19x 0.11.30.pre12) listens on 127.0.0.1:58053
=> Booting Thin
=> Rails 3.2.13 application starting in production on http://0.0.0.0:9999
=> Call with -d to detach
=> Ctrl-C to shutdown server
/Users/abdullahbakhach/.rvm/gems/ruby-1.9.3-p484@global/gems/actionpack-3.2.13/lib/action_dispatch/http/mime_type.rb:102: warning: already initialized constant PDF
Uncaught exception: Host '78.111.131.68' is not allowed to connect to this MySQL server
Exiting
    /Users/abdullahbakhach/.rvm/gems/ruby-1.9.3-p484/gems/mysql2-0.3.14/lib/mysql2/client.rb:67:in `connect'

我知道,如果我尝试直接mysql从随机主机直接连接到 aws 机器上托管的数据库,它会以同样的理由拒绝该连接。这个想法是欺骗 mysql db,让它认为我实际上是从 aws 内部连接到它。

从技术上讲,我可以做同样的事情:我可以专门为 mysql 主机创建另一个 ssh 隧道,但是我如何指示 ruby​​mine 连接到该隧道以连接数据库?

答案1

您正在寻找 SSH 隧道,以便您将本地端口(例如127.0.0.1:9876)转发到远程服务器上的特定端口。查找详细信息这里

以下是要点:

ssh -l <SERVER_USER> -i "<SERVER_SSH_KEY>" \ 
    -L <local-port-to-listen>:<remote-host>:<remote-port> 
    <remote-host>

以下是一个例子:

ssh -l ubuntu -i "/home/myuser/awskey.pem" -L \
    9999:51.100.80.10:3306 51.100.80.10

在上面的例子中,我们将对9999本地机器端口的所有请求转发3306到目标服务器(IP:)上的端口(对于 MySQL)51.100.80.10——通过目标上的 SSH 端口(通常是端口22)进行隧道传输。

对于 AWS,这意味着您需要更改 EC2 页面上的安全组以启用对服务器的 SSH 访问(SSH 通常在端口上运行22,因此您需要允许访问该 p)。

答案2

事实证明,sequelpro 已经提供了提供 ssh 密钥的选项......(我猜这是一个错误......如果你单击该ssh选项而没有看到密钥的字段,请单击返回到其他两个选项卡之一,然后再次单击ssh......你应该会看到以下屏幕:在此处输入图片描述

更新:这里有关使用 ssh 隧道连接到 sequel pro 的详细讨论

相关内容