12
votes

Etat de l'authentification ParamikoExceptionException

J'ai un problème de connexion à un périphérique avec un client PARAMIKO (version 1.7.6-2) SSH: xxx pré>

Lorsque j'utilise ssh à partir de la ligne de commande, cela fonctionne bien: p> xxx pré>

Quelqu'un a vu cela avant? p>

EDIT 1 strong> P>

Voici la sortie verbeuse de la Commande SSH: P>

Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import paramiko, os
>>> paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG)
>>> ssh = paramiko.SSHClient()
>>> ssh.load_system_host_keys()
>>> ssh.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
>>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> ssh.connect("123.0.0.1", username='root', password=None)
DEBUG:paramiko.transport:starting thread (client mode): 0x928756cL
INFO:paramiko.transport:Connected (version 2.0, client OpenSSH_5.1)
DEBUG:paramiko.transport:kex algos:['diffie-hellman-group-exchange-sha256', 'diffie-hellman-group-exchange-sha1', 'diffie-hellman-group14-sha1', 'diffie-hellman-group1-sha1'] server key:['ssh-rsa', 'ssh-dss'] client encrypt:['aes128-cbc', '3des-cbc', 'blowfish-cbc', 'cast128-cbc', 'arcfour128', 'arcfour256', 'arcfour', 'aes192-cbc', 'aes256-cbc', 'rijndael-cbc@lysator.liu.se', 'aes128-ctr', 'aes192-ctr', 'aes256-ctr'] server encrypt:['aes128-cbc', '3des-cbc', 'blowfish-cbc', 'cast128-cbc', 'arcfour128', 'arcfour256', 'arcfour', 'aes192-cbc', 'aes256-cbc', 'rijndael-cbc@lysator.liu.se', 'aes128-ctr', 'aes192-ctr', 'aes256-ctr'] client mac:['hmac-md5', 'hmac-sha1', 'umac-64@openssh.com', 'hmac-ripemd160', 'hmac-ripemd160@openssh.com', 'hmac-sha1-96', 'hmac-md5-96'] server mac:['hmac-md5', 'hmac-sha1', 'umac-64@openssh.com', 'hmac-ripemd160', 'hmac-ripemd160@openssh.com', 'hmac-sha1-96', 'hmac-md5-96'] client compress:['none', 'zlib@openssh.com'] server compress:['none', 'zlib@openssh.com'] client lang:[''] server lang:[''] kex follows?False
DEBUG:paramiko.transport:Ciphers agreed: local=aes128-ctr, remote=aes128-ctr
DEBUG:paramiko.transport:using kex diffie-hellman-group1-sha1; server key type ssh-rsa; cipher: local aes128-ctr, remote aes128-ctr; mac: local hmac-sha1, remote hmac-sha1; compression: local none, remote none
DEBUG:paramiko.transport:Switch to new keys ...
DEBUG:paramiko.transport:Trying discovered key b945197b1de1207d9aa0663f01888c3c in /home/waffleman/.ssh/id_rsa
DEBUG:paramiko.transport:userauth is OK
INFO:paramiko.transport:Authentication (publickey) failed.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/pymodules/python2.6/paramiko/client.py", line 327, in connect
    self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys)
  File "/usr/lib/pymodules/python2.6/paramiko/client.py", line 481, in _auth
    raise saved_exception
paramiko.AuthenticationException: Authentication failed.
>>> 


4 commentaires

J'ai essayé ceci pour se connecter à un QNAP TS-409 qui exécute un linux incorporé. Travaillé bien.


Je suppose que vous pourriez faire ssh root@123.0.0.1 pour voir comment SSH se connecte.


faire "ssh -v root@123.0.0.1" et voir si SSH utilise l'authentification publique ou une autre méthode d'authentification?


Il semble que c'est la réponse pour vous -> Stackoverflow.com/Questions/14274566/...


6 Réponses :


0
votes

Sshclient de Paramiko a load_system_host_keys méthode que vous pouvez utiliser pour charger un ensemble spécifique à l'utilisateur des clés. À titre d'exemple dans les documents expliquant, il doit être exécuté avant de vous connecter à un serveur.


1 commentaires

Pas de chance. J'ai aussi essayé de supprimer le connu_hosts pour voir si cela avait un effet.



10
votes

Le serveur SSH sur le périphérique distant a refusé votre authentification. Assurez-vous que vous utilisez la touche correcte, la clé publique est présente dans autorisée_keys , .ssh Les autorisations de répertoire sont correctes, autorisé_keys Les autorisations sont correctes et l'appareil n'a pas d'autres restrictions d'accès. Il est difficile de dire ce qui se passe sans grumes du serveur.

[modifier] Je viens de regarder en arrière à travers votre sortie, vous vous authentifiez à l'aide de Aucun authentification. Cela n'est généralement pas autorisé et est utilisé pour déterminer quelles méthodes d'authentification sont autorisées par le serveur. Il est possible que votre serveur utilise l'authentification basée sur l'hôte (ou aucun du tout!).

car auth_none () est rarement utilisé, il n'est pas accessible à partir de la classe SSHClient , vous devrez donc utiliser transport directement. xxx


3 commentaires

Salut @waffleman, je gagne également le même problème .. donc je mettais de la ligne de transport.Auth_none ('root') ligne dans le code, mais maintenant d'erreur comme .. NomError: Nom 'Transport' n'est pas défini


@Spike: Avez-vous déclaré le transport? Transport = ssh.get_transport ()


@ JIMB - Nice Catch. Mon hôte me permettait de me permettre de la ligne de commande sans mot de passe, même lorsque j'avais utilisé ssh -i $ home / .ssh / id_rsa commande , mais ce n'était que quand j'ai remarqué que je n'étais pas réellement en utilisant les clés que j'ai pu résoudre le problème. SSH -V DITES, DEBUG1: Authentification réussie (GSSAPI-with-Mic). (Ceci est ad, je crois). J'ai copié mon fichier autorisé_keys à l'hôte et à Paramiko fonctionne.



0
votes

J'ai une erreur similaire lorsque le serveur utilise l'authentification AD. Je pense que c'est un bogue de paramiko. J'ai appris que je dois définir des clés SSH avant d'utiliser le paramiko.


0 commentaires

2
votes

Assurez-vous que les autorisations sur les fichiers de clé publique et privée (et éventuellement du dossier contenant) sont définies sur très restrictives (I.e. CHMOD 600 ID_RSA). Il s'avère que cela est requis (par le système d'exploitation?) Pour utiliser les fichiers sous forme de touches SSH. A trouvé cela de ma collègue utile :) Assurez-vous également que vous utilisez le nom d'utilisateur correct pour la clé SSH donnée.


0 commentaires

6
votes

Un suivi très tard sur cette affaire, je crois que je rencontrais le même problème que Waffleman, dans un contexte d'un réseau confiné.

L'indice d'utilisation de auth_none sur L'objet Transport s'est avéré très utile, mais je me suis retrouvé un peu perplexe sur la manière de mettre en œuvre cela. Chose est, à compter d'aujourd'hui au moins, je ne peux pas obtenir l'objet Transport d'un objet SSHCLIPE jusqu'à ce qu'il soit connecté; Mais il ne se connecte pas dans la première place ...

Donc, au cas où cela est utile aux autres, mon travail autour est ci-dessous. Je viens de remplacer la méthode _auth .

OK, ceci est fragile, comme _auth est une chose privée. Mes autres alternatives ont été - en fait sont toujours - pour créer manuellement le Transport et canal objets, mais pour le moment, je me sens comme si je suis beaucoup mieux à partir de tout ça sous la hotte. xxx


0 commentaires

0
votes

Il pourrait y avoir des raisons différentes sur SERVER STRAND> (SSHD où vous vous connectez à), il peut donc être difficile de déboguer sur le côté du client.

Par exemple, queue - f / var / journal / sécurisé code>: p>

9 15:50:26 PC1UDATAHGW04 SSHD [27501]: Authentification refusée: mauvais Propriété ou modes pour le répertoire / Accueil / Testuffer P> blockQuote>

Si vous exécutez LS -LAD / Accueil / Testuffer Code> Pour voir les autorisations, vous verrez par exemple dans notre cas: P>

$ ls -lad /home/testuser
drwxrwxr-x 16 testuser  testgroup 57344 Oct  9 15:23 /home/testuser


0 commentaires