Lancer ssh-add
sur la ligne de commande ne déverrouille plus correctement les clés ssh sur mon système (Ubuntu 11.10 avec Unity). Même après avoir exécuté ssh-add, lorsque je ssh sur un serveur, une boîte de dialogue apparaît pour me demander ma phrase secrète ssh. Après cela, les choses fonctionnent comme prévu.
ssh-agent
est en cours d'exécution. Quand je me connecte pour la première fois:
$ ps -ef | grep ssh-agent
mish 1853 1818 0 18:55 ? 00:00:00 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session /usr/bin/gnome-session --session=ubuntu
Comment puis-je déverrouiller correctement la clé ssh sans avoir à ssh sur un serveur? (Déclencher manuellement la fenêtre de dialogue ssh key serait une solution acceptable, mais je ne sais pas comment faire cela).
Mon cas d'utilisation est que j'utilise tmuxinator et que je souhaite configurer plusieurs connexions ssh. Donc, je veux la clé SSH déverrouillée. Sinon, toutes les boîtes de dialogue de la clé ssh apparaissent toutes et je dois entrer ma phrase secrète plusieurs fois. Ou je peux ssh quelque part avant de lancer tmuxinator, mais la connexion est lente ici, de sorte que cela ne fait qu'ajouter de la friction. Je souhaite donc déverrouiller la clé ssh avant de lancer tmuxinator, sans avoir à ssh quelque part au préalable.
J'ai juste essayé de vous déconnecter et de vous reconnecter. Puis j'ai fait:
$ env | grep -i ssh
SSH_AGENT_PID=8693
SSH_AUTH_SOCK=/tmp/keyring-Ho4cfE/ssh
$ ssh-add -D
All identities removed.
$ ssh-add -l
1024 b8:12:34:56[...]:19 name@computer (DSA)
$ ssh-add
Enter passphrase for /home/name/.ssh/id_dsa:
Identity added: /home/name/.ssh/id_dsa (/home/mish/.ssh/id_dsa)
$ ssh-add -l
1024 b8:12:34:56[...]:19 /home/name/.ssh/id_dsa (DSA)
1024 b8:12:34:56[...]:19 name@computer (DSA)
0 mish@mishtop:~$ ssh server
À quel moment on me demande à nouveau ma phrase secrète par la boîte de dialogue de l'interface graphique. Frustrant ...
Il est également intéressant de noter qu'après "Toutes les identités supprimées", ssh-add -l
montre toujours une identité. Cela me trouble. Et il ne semble y avoir qu'un seul agent ssh en cours d'exécution.
J'ai trouvé un bug sur le tableau de bord à ce sujet: https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/841672
Cependant, cette question visait à trouver une solution de contournement plutôt que de se demander pourquoi cela ne fonctionnait pas. J'espère donc que la question sera valide.
Rien d'inhabituel dans /etc/ssh/ssh_config
- Je ne l'ai pas touché. J'ai un ~/.ssh/config
mais ce ne sont que des ports et des noms d'utilisateur.
J'ai regardé quels processus étaient en cours lorsque la boîte de dialogue est apparue. C'était /usr/lib/gnome-keyring/gnome-keyring-Prompt-3
, lancé par /usr/bin/gnome-keyring-daemon --daemonize --login
J'ai essayé de lancer l'invite à partir d'un terminal, mais rien ne s'est passé. Alors toujours bloqué.
Pas une réponse directe à la question ci-dessus, mais un moyen de contourner le problème central:
Arrêtez le démarrage de gnome-keyring ssh-agent. Ensuite, ssh-agent, ssh-add et ssh fonctionnent comme prévu. (Ou du moins comme je l’attendais).
Pour arrêter le démarrage de gnome-keyring, ssh-agent:
Sudo mv /etc/xdg/autostart/gnome-keyring-ssh.desktop /etc/xdg/autostart/gnome-keyring-ssh.desktop.disabled
Cela lance un invite graphique pour mon mot de passe ssh, mais différent de celui qui permet à ssh d’utiliser la clé ssh. Même après l’avoir fait, j’obtiens toujours une invite graphique pour demander ma phrase secrète ssh: /
Voir Edit 3 dans la question ci-dessus pour plus.
J'ai trouvé un moyen de le déclencher à la fin. J'ai créé ~/bin/gssh-add
et y ai ajouté les éléments suivants:
SSH_ASK_PASS=/usr/bin/ssh-askpass ssh-add
Je le fais alors exécutable:
chmod +x ~/bin/gssh-add
Et puis je le lance en utilisant Alt + F2. Cela déclenche la boîte de dialogue gnome.
Notez que si vous exécutez gssh-add
à partir du terminal, la boîte de dialogue gnome ne sera pas déclenchée. Voir la section section ENVIRONNEMENT de la page de manuel ssh-add pour plus de détails.
Ou je peux ssh quelque part avant de lancer tmuxinator, mais la connexion est lente ici, de sorte que cela ne fait qu'ajouter de la friction.
N'oubliez pas que votre 'quelque part' n'a pas besoin d'être distant:
ssh localhost
C'est comme ça que je le fais d'habitude.
(Je tape ensuite ^D
à la nouvelle invite de shell pour le jeter à l’ancien. Si vous ne craignez pas les frappes supplémentaires, une commande comme ssh localhost true
est une alternative plus ordonnée.)
Bien sûr, cela ne fonctionne que sur les systèmes qui demandent des clés SSH (par exemple, après l’utilisation de ssh-copy-id
), mais de votre question, vous avez l’impression que vous l’avez déjà probablement.