paramiko, n'est-ce pas parler à ssh-agent. même comportement en tissu
Tout d'abord j'ai essayé d'obtenir le tissu de travailler, mais il continuait à me demander un mot de passe.
Donc j'essaye de réduire le problème. Il serait peut-être une bonne POC pour créer une connexion SSH à partir de Python. J'ai découvert que le tissu utilise parmiko pour SSH manipulation. Hmm. Ok, permet d'essayer de trouver un travail.
Voici ce que j'ai écrit.
from ssh import *
import os
print "SSH-AGENT VARS"
print "SSH_AGENT_PID: %s " % os.environ['SSH_AGENT_PID']
print "SSH_AUTH_SOCK: %s " % os.environ['SSH_AUTH_SOCK']
a = Agent()
keys=a.get_keys()
print keys.count("192.168.1.10")
client = SSHClient()
client.load_system_host_keys()
client.connect('192.168.1.10')
Résultant dans les messages d'erreur suivants:
% ./ssh_test.py
SSH-AGENT VARS
SSH_AGENT_PID: 26557
SSH_AUTH_SOCK: /tmp/ssh-pZHBElj26556/agent.26556
0
Traceback (most recent call last):
File "./ssh_test.py", line 18, in <module>
client.connect('192.168.1.10')
File "/usr/local/lib/python2.7/dist-packages/ssh/client.py", line 332, in connect
self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys)
File "/usr/local/lib/python2.7/dist-packages/ssh/client.py", line 493, in _auth
raise saved_exception
ssh.PasswordRequiredException: Private key file is encrypted
ssh-agent est en cours d'exécution dans ma session, je peux SSH à cette zone, pas de problèmes, il ne veut pas me demander un mot de passe ou quoi que ce soit.
Je devine paramiko n'est pas en mesure de se connecter à ssh-agent pour une raison ou une autre.
Quelqu'un d'autre a eu un problème de ce genre? Je suis sous Ubuntu 11.10
Il me semble me rappeler d'essayer un Tissu tout à l'arrière et d'avoir des problèmes similaires, peut-être qu'il a été cassé pendant un certain temps?
Me connecter, juste en utilisant le nom d'hôte comme argument. Ce n'est que par la documentation.
http://www.lag.net/paramiko/docs/paramiko.SSHClient-class.html
connect(self, hostname, port=22, username=None, password=None, pkey=None, key_filename=None, timeout=None, allow_agent=True, look_for_keys=True, compress=False)
env.user = 'my_user'
dans votre fabfile?Essayé, même problème. Je suppose que le problème vient de paramiko par opposition aux tissus. Obtenir paramiko de travail de première serait une bonne étape. C'est pourquoi, j'ai créé un petit script de test ci-dessus.
Avez-vous essayé de créer une branche nouvelle de clés RSA, en s'assurant qu'il n'a pas de mot de passe, de l'installer sur le serveur, et l'utiliser à la place?
Avez-vous essayé
client.connect('192.168.1.10', password='your_passphrase')
? J'ai le sentiment que cela pourrait aider.Mais ssh-agent est en cours d'exécution, et authentifié dans ma console. Je peux ssh vers le serveur sans mot de passe. Ma question est de savoir comment y parvenir avec paramiko. Je ne veux pas mettre le mot de passe dans le code, ce qui irait à l'encontre de l'objectif de l'exercice.
OriginalL'auteur Bryan Hunt | 2012-03-23
Vous devez vous connecter pour publier un commentaire.
Donc, à partir de la paramiko code et le vôtre lorsque vous faites une.get_keys() doit retourner une liste. J'aimerais voir de quoi il en retourne. Et il woudln pas retourner quelque chose que vous pouvez compter comme ça, comme c'est le retour de la réelle clé chiffrée bits. Mais de toute façon, comme vous l'avez déplacé sur ssh, et qui fonctionne, passons à Tissu.
Vous pouvez obtenir plus de journalisation en le tournant pour le ssh lib par:
Dans votre fabfile. Ça va jusqu'à tous les journaux et de montrer plus de ce que paramiko/ssh lui-même qui peut vous aider à déboguer le problème.
OriginalL'auteur Morgan
Ok, donc la première chose que j'ai découvert était que Paramiko est le cas, et laissés à l'abandon.
Il est maintenant connu comme le paquet ssh, au moins sous Ubuntu, et a un autre responsable (bitprophet)
Voici une démo de la classe qui fonctionne exactement comme décrit:
https://raw.github.com/bitprophet/ssh/master/demos/demo.py
Il a besoin de ce fichier, pour interactive invite:
https://github.com/bitprophet/ssh/blob/master/demos/interactive.py
Voici un exemple de session, à l'aide de:
Qui ne répond pas à la question de savoir pourquoi le tissu n'est pas l'authentification ssh-agent correctement pensé. Donc, la question reste ouverte.
Mise à jour:
Grâce à Morgan astuce, j'ai obtenu un peu plus loin avec ce problème. Comme il l'a suggéré, j'ai activé le ssh de journalisation par adjonction, vers le haut de mon fabfile.py
J'ai également suivi le journal du serveur. En agissant de la sorte, j'ai découvert que l'utilisateur qui j'ai spécifié a été prise en considération et mon nom d'utilisateur utilisé à la place.
Sur le serveur:
Localement:
Hum, c'est étrange, j'ai exécuté la commande:
fab diskfree -H xxx.xxx.xxx.xxx -u root
Mais qu'est-ce que cela?
Hmm
Peut-être à la racine du problème? Pourrait le ssh messages d'erreur juste être trompeuse moi?
J'ai supprimé la ligne et cela a fonctionné, donc je pense que oui, c'est la réponse.
OriginalL'auteur Bryan Hunt
Je voudrais essayer de spécifier le mot de passe comme le mot-clé
password
argumentconnect()
.Comme indiqué dans les docs pour
SSHCLient.connect()
, il utilise toutPKey
il peut trouver dans le système si le système n'est pas fourni avec une spécifique. Les méthodes de la classefrom_private_key()
etfrom_private_key_file()
(je ne suis pas sûr de l'un d'eux est appelé, sans doute les deux) prendre un argument facultatifpassword
. Les docs disent,...ce qui est probablement ce qui se passe dans votre cas.
OriginalL'auteur Lev Levitsky
Peut-être vous avez besoin de courir, pour ajouter la clé de l'agent.
https://groups.google.com/forum/?fromgroups=#!topic/ansible-projet/yRSMmlqKsAA
OriginalL'auteur Maelvon