SSHトンネルを介して接続する必要があるため、異なるホスト名でセットアップされた〜50個のデータベースがあります。
例えば:
ssh.example.com
のSSHホスト
mysql1.example.com
のMySQLホスト
Autossh(Debianを実行するWebサーバー)を使用してトンネルを作成できましたが、SSHトンネルの「向こう側」にある特定のMySQLホスト名に接続する方法がわかりません。
lsof -i -n | egrep '\<ssh\>'
と入力すると、トンネルが機能していることを確認します(ポート3307をssh.example.comのポート3306に送信します)
したがって、mysql -h 127.0.0.1 -P 3307
を試行すると、接続が拒否されます。 MySQLサーバーではないので、それほど奇妙ではありません。
皆さんへの私の質問:
SSHトンネルの作成後にmysql1.example.com
ホストを指定するにはどうすればよいですか?私はどこでも検索しようとしましたが、理解できないようです。
それを解決しました!問題は、トンネル自体を作成するときに正しいサーバーに接続することでした-トンネルが来るのを見ていたはずです。
ssh -f [email protected] -L 3307:mysql1.example.com:3306 -N
その後、mysql -h 127.0.0.1 -P 3307
意図したとおりに機能しました。 :)
SSHトンネルを使用してMySQLに接続する方法に関する素晴らしいブログを入手しました。それは非常によく説明されています ここ 。
SSHトンネルに接続するコマンド:
ssh -L [listening port]:[REMOTE_MYSQL_Host]:[REMOTE_MYSQL_PORT] [SSH_USER]@[SSH_Host]
MySQLに接続するコマンド:
localhost:[listening port]
mysql-server
に直接アクセスできない場合は、jump-server
を使用します。
マシンからjump-serverに接続(ssh)し、そこからmysql-server
に接続します。
これはssh- tunneling
を使用することで回避できます。
あなたの
jump server is `jump-ip`
mysql server is `mysql-ip`
your machine is `machine-ip`
Sshクライアントを開くだけです(windowsのPuTTYまたはlinux/iosの端末)。
タイプ:
ssh -L [local-port]:[mysql-ip]:[mysql-port] [jump-server-user]@[jump-ip]
この後、localhost
とlocal-port
を使用して、リモートマシン上のmysql-serverに直接アクセスできます。
例えば。 mysqlデータベースにアクセスするためのJdbc URLは、その場合、次のようになります
jdbc:mysql://localhost:[local-port]/[database-name]
このコマンドを使用してDBへのトンネルを作成しました
ssh -L 10000:localhost:3306 user@<ip addess to connect DB> -N -f
-Lはユーザー定義のローカルホストポートuは任意のポート番号を提供できます
0〜65535。0〜1023は予約済みです。
必要なサーバーにキーベースの認証を使用しているかどうか
このようなキーに言及してください。
ssh -i <path of the private key> -L 10000:localhost:3306 user@<ip addess to connect DB> -N -f