SSHトンネリングの概念を理解していないようです。私が現在行っている状況は次のとおりです。
- 仕える人ㅏ、sshを介してアクセスでき、その中にmysql dbを介してアクセスできます
localhost:3306
。 - 仕える人第二、SSH経由でアクセスできます。ㅏ。
- MySQLインスタンス氏アクセス可能第二。サーバー自体にはアクセスできず、データベースサーバーにのみアクセスできるため、どこでもsshを使用できません。氏。すべてのポートにのみ接続できます。第二。
私の目標はMySQLレプリケーションですㅏ到着氏ここで、Aはマスター装置であり、氏- 奴隷。で接続したい場合はどうすればよいですか?氏到着ㅏ。私はそれが次のように想像しています。
C ─────────B:B_PORT────────> B
│││
|/─────tnl A:22────┘││
A_db <────localhost:3306─────┘│
|\─────tnl A:22──────┘
これまで私はこれを実行してみました。第二 sudo ssh -L B_PORT:localhost:3306 A_user@A_ip -f -N
しかし、まだアクセスできないと思います。ㅏ~から氏、接続時B_ポート。
編集:ssh -L B_PORT:localhost:3306 A_user@A_ip -f -N -g
@larsksが提案したように試しましたが、うまくいきませんでした。彼の説明によると、ネットワークに問題がある可能性があると信じていました。
私の今までの旅
- 次の場所にトンネルを作成第二そして
ssh -L B_PORT:localhost:3306 A_user@A_ip -f -N -g
- つながる氏到着第二。
- ネットワーク統計が有効になっています。第二複数のSYN_RECV接続を表示氏到着第二
- 私が接続しようとするとB_ポート~から第二わかりました。
packet_write_wait: Connection to A port 22: Broken pipe
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
- SSH接続が切断されました第二トンネルを再開する必要があります
- セキュリティグループやその他のネットワークルールを試してください。ネットワークインバウンドとアウトバウンドの有効化氏すべてが正常です!
答え1
-g
SSHコマンドラインにオプションを追加する必要があります。
-g Allows remote hosts to connect to local forwarded ports.
If used on a multiplexed connection, then this option
must be specified on the master process.
B
これにより、これらの接続を確立するためにホストに転送されたポートが公開されますC
。これは、ファイアウォール構成がB
これらの接続を可能にすると仮定します。
このオプションは、ローカルポートに使用されるローカルバインディングアドレスを変更します-g
。ssh
それ以外の場合、-g
結果-L 8000:localhost:8000
は次のようになります。
$ netstat -tln | grep 8000
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN
tcp6 0 0 ::1:8000 :::* LISTEN
ご覧のとおり、この場合、両方のソケットはループバックアドレス(127.0.0.1
ipv4と::1
ipv6の場合)にバインドされています。
これにより、-g
我々は以下を得る。
$ netstat -tln | grep 8000
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN
tcp6 0 0 :::8000 :::* LISTEN
ssh
この場合、ループバックアドレスの代わりにワイルドカードアドレスへのバインディングが行われたことを確認できます。
答え2
なぜsudo
?sudo
それがすべての問題に対する答えではなく、しばしばそれが理由でもあります。
私はこれがあなたが望むものだと思います。
ssh -L local_port:remote_ip:remote_port jump_user@jump_ip
ssh -L C_PORT:A_ip:3306 B_user@B_ip -f -N
- リモートはジャンプの観点から見えます。
- 地元の観点から見たジャンプ