ssh ProxyCommand を使用して、要塞ホストの背後にあるリモート MySQL サーバーに接続するにはどうすればよいですか?

ssh ProxyCommand を使用して、要塞ホストの背後にあるリモート MySQL サーバーに接続するにはどうすればよいですか?

ここでは 3 台のマシンが関係しています。

  1. 私が開発を行うローカルホスト。別名ラップトップ。
  2. 最初に接続する必要のある要塞ホスト。別名、ジャンプ。
  3. 接続したい MySQL サーバー。別名 DB。

私の ssh 公開キーは、ジャンプ時に /home/myusername/.ssh/authorized_keys にあります。

私の ~/.ssh/config には次の内容があります:

Host jump
    HostName jump.domain.com
    User myusername
    IdentityFile ~/.ssh/myprivatekey

ssh jump問題なくジャンプできます。

ラップトップからDBに接続できるようにするには、ラップトップのターミナルでどのSSHコマンドを実行する必要がありますか?

mysql -h 127.0.0.1 -P 3308

SSH トンネルとポート転送が必要ですが、構文がまだ正しくありません。本番 DB には 3308、ステージング DB には 3307 を使用し、ローカル MySQL DB は 3306 で実行したいので、非標準の MySQL ポートにポート転送します。

答え1

最終的に私が使用したのはこれです:

ssh -f -L3307:staging.mysql-server.com:3306 jump sleep 10000000
ssh -f -L3308:production.mysql-server.com:3306 jump sleep 10000000

これはhttp://csce.uark.edu/~kal/info/private/ssh/ch09_02.htm9.2.6 秒

注: 私が尋ねた質問とは反対に、proxyCommand は必要ありません。必要なのは、ssh コマンドライン オプションの適切な組み合わせだけです。

答え2

コマンドは ですssh -fL <mysql db port>:<mysql server url>:<mysql db port> <username>@<bastian url> '<remote command>'

ソース

答え3

マシンAからマシンBを経由してCに接続すると仮定すると、次の.ssh/configを使用できます。

Host B
  User username_on_b
  Hostname ip_of_b
  IdentityFile ~/.ssh/key_for_b

Host C
  User username_on_c
  Hostname ip_of_c
  IdentityFile ~/.ssh/key_for_c
  Localforward 3308 ip_of_your_sql_server:3306
  Proxyjump B
  # or old-fashion
  # Proxycommand ssh B nc %h %p

次に、単に A から次のように入力します。

ssh C

そしてAから、

mysql -P 3308 -H localhost

関連情報