8
votes

Comment ouvrir un tunnel SSH utilisant Python?

J'essaie de vous connecter à une base de données MySQL distante à l'aide de Django.
La documentation spécifie qu'il est nécessaire d'ouvrir d'abord un tunnel SSH à se connecter à la base de données.
Existe-t-il une bibliothèque Python qui peut ouvrir un tunnel SSH chaque fois que certains paramètres sont définis?


5 Réponses :


10
votes

Vous pouvez essayer paramiko 'S Forward fonctionnalité. Pour une vue d'ensemble de paramiko, voir ici .


2 commentaires

Le lien Forward.py n'est pas disponible.


Le lien d'aperçu indique un article qui semble avoir été supprimé. C'est une honte, car il y avait un lot d'autres personnes qui ont liées à cet article. Vous pouvez essayer de chercher des copies de cela, mais je n'ai pas eu beaucoup de chance. Il est mentionné ici et Google a trouvé Ce , mais je n'ai pas pu confirmer une alternative en raison des paramètres Internet où je travaille.



5
votes

Voici un extrait de code pour Python3 (mais vous devriez être capable de le rénover dans Python2 sans difficulté). Il gère un tunnel SSH dans un fil séparé; Ensuite, le fil principal fait quelque chose pour obtenir le trafic réseau sur le tunnel SSH.

Dans cet exemple, le tunnel SSH en avant 2222 local au port 80 sur localhost. L'activité principale consiste à exécuter xxx

Ie., Récupérant une page Web mais à partir du port 2222.

La classe Sshtunnel est initialisée avec 4 paramètres, le local et port distant, l'utilisateur distant et l'hôte distant. Tout ce qu'il fait, est de commencer ssh de la manière suivante: xxx

Pour effectuer ce travail, vous aurez besoin d'un identifiant sans mot de passe pour la télécommunateur @ Remotehost (via ~ /.ssh/id_rsa.pub qui est connu sur le serveur distant). Le tunnel SSH ainsi en cours d'exécution est sur un fil; La tâche principale doit être dans une autre. Le fil du tunnel SSH est marqué comme démon afin qu'il s'arrête automatiquement une fois que l'activité principale se termine.

Je n'ai pas mis dans un exemple de connectivité complet de MySQL, car il devrait être explicite de soi. Une fois que Sshtunnel établit un port TCP local, vous pouvez vous connecter à celui-ci - Soyez-le via votre client MySQL, CURL ou autre. xxx


0 commentaires

6
votes

Essayez Utilisez Paquet Sshtunnel .

Ceci est simple: P>

pip install sshtunnel
python -m sshtunnel -U vagrant -P vagrant -L :3306 -R 127.0.0.1:3306 -p 2222 localhost


0 commentaires

2
votes

Voici une petite classe que vous pouvez déposer dans votre code: xxx pré>

et voici comment vous pouvez l'utiliser, par exemple avec MySQL (Port 3306 généralement): P>

with SSHTunnel('database.server.com', 'you', '22', '/path/to/private_key', '3306') as tunnel:
    print "Connected on port {} at {}".format(tunnel.local_port, tunnel.local_host)


1 commentaires

J'ai dû utiliser -o sortie exitonforwardfailure = oui au lieu de -o exitonforwardfailure = true . Autre que cela, une petite classe utile. Merci!



0
votes

Pourrais-je suggérer d'essayer quelque chose comme Pyngrok code> pour gérer par programme une gérer par programme un tunnel code> nagrok code> pour vous? Divulgation complète, je suis le développeur de celui-ci. Exemple de ssh ici , et Django Exemple ici , mais c'est aussi simple que l'installation Pyngrok code>:

# <NgrokTunnel: "http://<public_sub>.ngrok.io" -> "http://localhost:8000">
http_tunnel = ngrok.connect(8000)


0 commentaires