Je ne comprends pas (même après avoir lu quelques articles dédiés à ssh tunelling) quels paramètres de la commande CLI ssh dans ce script. Fondamentalement, je dois me connecter à un serveur (je l'ai appelé 'ssh_tunnel_host: 22'), que de se connecter à db_host en utilisant ce tunnel.Accéder à la base de données distante via tunnel ssh (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')
Quelqu'un pourrait-il me expliquer:
- Qu'est-ce que local_bind_address - est-il mon adresse locale ou ssh_tunnel_host adderss local? Où puis-je apprendre l'IP et le port?
- Dépend de la question précédente - qu'est-ce que remote_bind_address - est-ce l'adresse de ssh_tunnel_host ou de db_host? Où puis-je apprendre ces IP et port?
- Où dois-je me connecter avec client.connect()? Lier localement ou à distance?
(j'ai essayé de lire les documents, mais il est toujours déconner)
Vous ne pouvez pas essayer votre avis pour le moment. Mais pourquoi db host ne participe pas à la chaîne de connexion? –
L'hôte db '127.0.0.1: 3306' n'est-il pas vu depuis 'ssh_tunnel_host'? Comment est-ce qu'il est tunnelisé autrement. Per (2), si l'hôte DB n'est pas local à l'hôte du tunnel, vous devez l'avoir comme adresse de liaison distante, c'est-à-dire 'remote_bind_address = (db_host, 3306)'. – danny
Merci, enfin je me suis connecté à mon db, définissez db_host comme remote_bind_address host - Je pense que je n'ai pas dit clairement que mon db n'est pas sur ssh_tunnel_host, sur un autre serveur auquel j'accède seulement via ssh_tunnel_host: 'remote_bind_address = (db_host , 3306) ' –