CLIのsshコマンドのどのパラメータがこのスクリプトのどこにあるのかわかりません(sshチューニング専用の記事を少し読んだ後でも)。 基本的に私はこのトンネルを使ってdb_hostに接続するよりも、( 'ssh_tunnel_host:22'という)いくつかのサーバーに接続する必要があります。sshトンネル経由でリモートDBにアクセスする(Python 3)
with SSHTunnelForwarder(
('ssh_tunnel_host', 22),
ssh_username="ssh_username",
ssh_pkey="/somepath/id_rsa",
local_bind_address=('0.0.0.0', 1234),
remote_bind_address=('127.0.0.1', 3306)
) as tunnel:
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('127.0.0.1', 1234)
db_connection = pymysql.connect(host=db_host, port=3306, db='mysql', user='user',
password='password', charset='utf8mb4')
誰かが私に説明してもらえ:
- local_bind_addressは何ですか - それは私のローカルアドレスまたはssh_tunnel_hostローカルadderssのですか? IPとポートはどこで知ることができますか?
- 前の質問に依存します - remote_bind_addressとは何ですか - ssh_tunnel_hostまたはdb_hostのアドレスですか?これらのIPとポートはどこで知ることができますか?
- どこでclient.connect()に接続すればよいですか?ローカルまたはリモートバインド?
(私はドキュメントを読み取ろうでしたが、それはまだいじりれる)
すぐにアドバイスを試すことはできません。しかし、なぜDBホストが接続チェーンに参加していないのですか? –
'ssh_tunnel_host'から見たdbホスト' 127.0.0.1:3306'はありませんか?どうやってそれがトンネリングされているのですか? Per(2)の場合、DBホストがトンネルホストに対してローカルではない場合、リモートバインドアドレス、つまり 'remote_bind_address =(db_host、3306)'にする必要があります。 – danny
ありがとうございました。最後に私のdbに接続し、db_hostをremote_bind_addressホストに設定しました。私はdbがssh_tunnel_hostにないことを明示していないと思います。 'remote_bind_address =(db_host 、3306) ' –