81 votes

Pourquoi le transfert d'agent ssh ne fonctionne pas ?

Sur mon propre ordinateur, qui fonctionne sous MacOSX, j'ai ceci dans ~/.ssh/config

Host *
ForwardAgent yes
Host b1
ForwardAgent yes

b1 est une machine virtuelle exécutant Ubuntu 12.04. Je m'y connecte comme ceci :

ssh pupeno@b1

et je me connecte sans qu'on me demande un mot de passe parce que j'ai déjà copié ma clé publique. En raison de la redirection, je devrais pouvoir me connecter à pupeno@b1 depuis b1 et cela devrait fonctionner, sans me demander de mot de passe, mais ce n'est pas le cas. Il me demande un mot de passe.

Qu'est-ce que je rate ?

Voici la sortie verbeuse du second ssh :

pupeno@b1:~$ ssh -v pupeno@b1
OpenSSH_5.9p1 Debian-5ubuntu1, OpenSSL 1.0.1 14 Mar 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to b1 [127.0.1.1] port 22.
debug1: Connection established.
debug1: identity file /home/pupeno/.ssh/id_rsa type -1
debug1: identity file /home/pupeno/.ssh/id_rsa-cert type -1
debug1: identity file /home/pupeno/.ssh/id_dsa type -1
debug1: identity file /home/pupeno/.ssh/id_dsa-cert type -1
debug1: identity file /home/pupeno/.ssh/id_ecdsa type -1
debug1: identity file /home/pupeno/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9p1 Debian-5ubuntu1
debug1: match: OpenSSH_5.9p1 Debian-5ubuntu1 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA 35:c0:7f:24:43:06:df:a0:bc:a7:34:4b:da:ff:66:eb
debug1: Host 'b1' is known and matches the ECDSA host key.
debug1: Found key in /home/pupeno/.ssh/known_hosts:1
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/pupeno/.ssh/id_rsa
debug1: Trying private key: /home/pupeno/.ssh/id_dsa
debug1: Trying private key: /home/pupeno/.ssh/id_ecdsa
debug1: Next authentication method: password
pupeno@b1's password:

123voto

Pablo Points 7119

Il s'avère que ma clé n'était pas dans l'agent, et ça a réglé le problème :

OS X :

ssh-add -K

Linux/Unix :

ssh-add -k

Vous pouvez répertorier les clés chargées en utilisant :

ssh-add -l

ssh-add -L # for more detail

16voto

W.Mann Points 221

Une autre raison possible est le partage de connexion : l'un d'entre eux peut être déjà connecté sur l'autre hôte sans que le transfert d'agent et le partage de connexion soient activés. La deuxième connexion avec ssh -A (ou l'équivalent spécifié dans le fichier de configuration) via la connexion partagée ignorera silencieusement l'élément -A drapeau. Ce n'est qu'après une déconnexion complète ou la désactivation du partage de connexion pour la deuxième connexion que le transfert d'agent fonctionnera.

10voto

farmer-Bri Points 31

Pour moi, c'était simplement que l'hôte auquel je me connectais ( b1 dans l'exemple de l'affiche d'origine) exécutait son propre système persistant. ssh-agent . Il n'y a pas de sortie de débogage que j'ai pu voir pour expliquer ce qui se passait, l'hôte utilise simplement et silencieusement son code d'accès existant. ssh-agent et aucune redirection ne se produit. Cela me semble logique rétrospectivement :p

La redirection est comme la redirection de port ssh : c'est une tunnellisation, pas une négociation client-serveur.

I supposé c'était la seconde - que le fait d'avoir un ssh-agent s'exécutant sur l'hôte serait nécessaire pour le transfert d'agent, donc je l'ai configuré au début, mais c'était une erreur.

Voir les exemples suivants :

D'abord, je me connecte à l'hôte par ssh ccam (un raspberry pi) sans Agent Forwarding et confirmez qu'il n'y a pas de socket agent ou de clés ajoutées :

No agent forwarding

Deuxièmement, j'édite .bashrc pour s'assurer que ssh-agent fonctionne sur l'hôte ( c'était mon erreur ). Vous pouvez voir que lorsque je me reconnecte en utilisant -A pour activer le transfert d'agent, le socket de l'agent existe, mais l'agent n'a pas d'identité (je réalise maintenant que c'est parce que cela montre le socket local de ssh-agent plutôt qu'un socket transféré) :

Added ssh-agent to host

Enfin, je supprime le ssh-agent sur l'hôte raspberry-pi (non illustré) et reconnectez-vous. Vous pouvez voir que la clé est enfin disponible en inspectant à l'aide de ssh-add -L :

Successfully forwarding ssh key

8voto

  1. Vérifiez si votre ~/.ssh/id_rsa ~/.ssh/id_dsa ~/.ssh/id_ecdsa ont les permissions correctes. Ils doivent appartenir à votre utilisateur et être codés 600.

  2. Vérifiez que vous avez la bonne clé publique sur pupeno/.ssh/authorized_keys sur b1, et vérifier si authorized_keys a un saut de ligne à la fin de la touche.

  3. Vérifiez si vous avez ssh-agent qui fonctionne, essayez de charger les clés via ssh-add

  4. Essayez l'authentification et le transfert basés sur GSSAPI avec ssh -K

8voto

Mike S. Points 535

J'ai eu un problème avec le serveur sshd qui rejetait la demande de transfert d'agent parce qu'il n'y avait plus d'espace dans /tmp. Ceci était dû au fait que sshd avait besoin de créer un socket dans /tmp. Le nettoyage du disque a résolu mon problème.

ssh -v disait à l'époque :

debug1: Remote: Agent forwarding disabled: mkdtemp() failed: No space left on device

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X