Pourquoi le transfert d’agent ssh ne fonctionne-t-il pas?

58

Sur mon propre ordinateur, sous MacOSX, je l’ai dans ~ / .ssh / config

Host *
ForwardAgent yes
Host b1
ForwardAgent yes

b1 est une machine virtuelle exécutant Ubuntu 12.04. Je ssh à comme ça:

ssh pupeno@b1

et je me connecte sans me demander de mot de passe car j'ai déjà copié ma clé publique. En raison de la transmission, je devrais être capable de passer de bsh à pupeno @ 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 le résultat détaillé de la seconde 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:
pupeno
la source

Réponses:

94

Il s'est avéré que ma clé n'était pas dans l'agent et cela a été corrigé:

OS X :

ssh-add -K

Linux / Unix :

ssh-add -k

Vous pouvez lister les clés chargées en utilisant:

ssh-add -l

ssh-add -L # for more detail
pupeno
la source
5
Notez que cela ssh-add -Kest spécifique à OS X.
Roger Lipscombe
Devez-vous faire cela à chaque redémarrage?
Krauser
8
  1. Vérifiez si vos ./ssh/id_rsa .ssh/id_dsa .ssh/id_ecdsafichiers disposent des autorisations appropriées qui devraient appartenir à votre utilisateur et être chmodés 600.

  2. Vérifiez que vous avez la bonne clé publique pupeno/.ssh/authorized_keyssur b1 et vérifiez si authorized_keysun saut de ligne se trouve à la fin de la clé.

  3. Vérifiez que ssh-agent est en cours d’exécution, essayez de charger les clés via ssh-add

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

Daniel Prata Almeida
la source
La permission des clés est correcte et la clé de allowed_keys est correcte (sinon, je pense que j'aurais du mal à me connecter à la première place).
pupeno
Avez-vous eu ssh-agent en cours d'exécution? Que se passe-t-il lorsque vous faites ssh-add puis ssh -A pupeno @ b1 puis ssh pupeno @ b1?
Daniel Prata Almeida le
Pourquoi ne mettez-vous pas à jour la réponse en mentionnant ssh-add -K et j'accepterai la vôtre à la place de la mienne (puisque les informations ont été publiées presque simultanément).
pupeno
6

J'ai eu un problème avec la requête de transfert d'agent de rejet du serveur sshd car il ne restait plus d'espace dans / tmp. C'est parce que sshd doit créer un socket dans / tmp. Le nettoyage du disque a résolu mon problème.

ssh -v a dit à l'époque:

debug1: Remote: Agent forwarding disabled: mkdtemp() failed: No space left on device
BartBiczBoży
la source
1
J'ai eu le même problème, seules les autorisations étaient incorrectes sur / tmp. MERCI!!
Nevyn
6

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

W.Mann
la source
2

Pour le bénéfice des autres googleurs qui sont également arrivés à cette question:

Des espaces incorrects dans un fichier ~ / .ssh / config peuvent également causer des problèmes de tête.

J'ai récemment aidé un de mes collègues qui avait ceci:

# incorrect
host foobar ForwardAgent yes

au lieu de cela:

# correct
host foobar
  ForwardAgent yes

J'ai également rencontré des cas où l'indentation manquante des directives sous la liste des hôtes avait une incidence sur la fonctionnalité, même si ce n'était pas censé l'être.

Dale Anderson
la source
0

Ajouter les lignes suivantes au fichier .ssh / config

  Host **Server_Address**
     ForwardAgent yes

Ajouter une clé à l'agent SSH

 ssh-add -K

Se connecter au serveur distant

ssh -v **username**@**Server_Address**

Lancer le test de connexion contre GitHub

ssh -T [email protected]

Exécuter le test à distance de ls sur un référentiel git ciblé

git ls-remote --heads [email protected]:**account**/**repo**.git
Tahsin Turkoz
la source