Wie verbinde ich lokale Apps (z. B. Rubymine, Prosequel) mithilfe des privaten AWS-Schlüssels mit einem Remote-Server?

Wie verbinde ich lokale Apps (z. B. Rubymine, Prosequel) mithilfe des privaten AWS-Schlüssels mit einem Remote-Server?

Programme, die Remote-Verbindungen ermöglichen (normalerweise in SSH), fordern normalerweise einen Benutzernamen/ein Passwort an, um eine Verbindung zu einem Remote-Server herzustellen: siehe die folgenden Beispiele vonFortsetzungproUndAbonnieren, jeweils:

Fortsetzung Pro:Versuch, über SSH eine Verbindung zu einem Remote-MySQL-Server herzustellen:

Verbindungsfenster Sequelpro

Rubinmine:Versuch, serverseitiges Debuggen durchzuführen: Verbindungskonfigurationsfenster Rubytime

Mit Amazon AWS,Verbindung per SSH herstellenSie benötigen einen privaten Schlüssel und der Verbindungsbefehl lautet ungefähr so:

ssh -i %privateKeyFileName.pem% ubuntu@server

Frage:Wie binde ich diese private Datei ein, um eine erfolgreiche Verbindung mit Apps wie ProSQL oder Rubymine herstellen zu können?


Aktualisieren:Fortsetzung Pro kann gemacht werdennativ.. was Rubymine betrifft.. ich begann mitSSH-Tunneling.. also hier sind die Schritte:

Erste:Ich habe auf meiner Maschine einen SSH-Tunnelprozess gestartet, sodass alle an meinen Port localhost:9999 gesendeten Anfragen an die AWS-IP an Port 3000 weitergeleitet werden:

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

zweite:folgendedieseAnweisungen.. ich habe dieerniedrigenDebuggen Sie das Gem mit meinem Rails-Projekt … und führen Sie den folgenden Befehl aus:

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

dritte:Ich habe die Produktions-Debugeinstellungen in meinem Rubymine geändert und sie wie folgt auf Port 3000 in meinem lokalen Host verweisen lassen:

Bildbeschreibung hier eingeben

vierte:Ich habe den Debug-Prozess von Rubymine aus gestartet.

Problem:der Debugvorgang wurde gestartet, aber es wird mir angezeigt, dass keine Verbindung zum MySQL-Server hergestellt werden kann:

/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'

Ich weiß, dass wenn ich versuche, von einem zufälligen Host aus eine direkte Verbindung zur mysqlDatenbank herzustellen, die auf der AWS-Maschine gehostet wird, diese Verbindung aus denselben Gründen abgelehnt wird. Die Idee besteht darin, die MySQL-Datenbank zu täuschen und sie glauben zu lassen, dass ich tatsächlich von AWS aus eine Verbindung zu ihr herstelle.

Technisch kann ich dasselbe tun: Ich kann einen weiteren SSH-Tunnel speziell für den MySQL-Host erstellen, aber wie weise ich RubyMine dann an, für die Datenbank eine Verbindung zu diesem Tunnel herzustellen?

Antwort1

Sie suchen nach SSH-Tunneling, das Ihnen die Weiterleitung eines lokalen Ports (z. B. 127.0.0.1:9876) an den entsprechenden Port auf dem Remote-Server ermöglicht. Hier finden Sie die DetailsHier

Hier ist das Wesentliche:

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

und hier ist ein Beispiel:

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

Im obigen Beispiel leiten wir alle an den Port 9999auf der lokalen Maschine gestellten Anfragen an den Port 3306(für MySQL) auf dem Zielserver (IP: 51.100.80.10) weiter – getunnelt durch den SSH-Port auf dem Ziel (normalerweise Port 22).

Bei AWS bedeutet dies, dass Sie die Sicherheitsgruppen auf der EC2-Seite ändern müssen, um den SSH-Zugriff auf den Server zu ermöglichen (SSH läuft normalerweise am Port 22, daher müssen Sie den Zugriff auf diesen Port zulassen).

Antwort2

es stellt sich heraus, dass Sequelpro bereits die Option bietet, einen SSH-Schlüssel bereitzustellen. (Ich vermute, das ist ein Fehler. Wenn Sie auf die sshOption klicken und die Felder für den Schlüssel nicht sehen, klicken Sie zurück auf eine der beiden anderen Registerkarten und dann erneut auf ssh…. Anschließend sollte der folgende Bildschirm angezeigt werden:Bildbeschreibung hier eingeben

aktualisieren:sehenHierfür eine ausführliche Diskussion über die Verbindung zu Sequel Pro mittels SSH-Tunneling

verwandte Informationen