SSH Agent vs. Gnome Keyring ... und wie man es wieder zum Laufen kriegt

Seit ein paar Tagen bekam ich beim Versuch, meine private Keys dem SSH-Agent hinzuzufügen, eine Fehlermeldung, dass mein SSH-Agent damit irgendwie Probleme hat. Das ganze sieht in etwa so aus:

rian@thiasos:~$ ssh-add
Enter passphrase for /home/rian/.ssh/id_ecdsa: 
Error reading response length from authentication socket.
Could not add identity: /home/rian/.ssh/id_ecdsa

Ärgerlich, doch ich hoffte, im weiten Internet eine Lösung zu finden. Aber Lösungsvorschläge waren recht dünn gesäht, das einzige, was ich auf die Schnelle fand war ein (schlechter) Workaround, nämlich

eval `ssh-agent`

in der Konsole einzugeben. Das startet einen (weiteren (echten)) SSH-Agenten und setzt die nötigen Umgebungsvariablen. Dann funktioniert danach zwar das ssh-add, aber sobald man eine neue Konsole aufmacht sind diese Variablen natürlich nicht gesetzt und es funktioniert wieder nicht mehr. Nicht so toll.

Ein Kollege hat mich nun gestern im Gespräch darauf aufmerksam gemacht, dass dies wohl daran liegt, dass upstart beim Anmelden gnome-keyring startet (übrigens obwohl ich KDE benutze), das dann auch als SSH-Agent fungiert und den "echten" ssh-agent überschreibt. Und gnome-keyring kommt offenbar mit manchen Schlüsseln nicht klar.

Darauf hin habe ich in meinem System versucht rauszukriegen, warum seit kurzem gnome-keyring meint, auch als SSH-Agent einspringen zu müssen, und vor allem, wie man ihn daran hindert. Mit einem

rian@thiasos:~$ dpkg -L gnome-keyring | grep upstart | grep ssh
/usr/share/upstart/sessions/gnome-keyring-ssh.conf

wurde gleich klar, was ihn startet. Man kann die Datei nun entweder löschen, oder umbenennen (es reicht, wenn die Endung nicht mehr ".conf" ist), aber das finde ich nicht so sauber. In der Datei selber steht auch, wie man ihn sauberer daran hindern kann, was eigentlich ganz einfach ist. Man erstellt in seinem Home-Verzeichnis eine Datei mit dem Namen

~/.config/autostart/gnome-keyring-ssh.desktop

und folgendem Inhalt:

[Desktop Entry]
Type=Application
Name=SSH Key Agent
Comment=GNOME Keyring: SSH Agent
Exec=/usr/bin/gnome-keyring-daemon --start --components=ssh
OnlyShowIn=GNOME;Unity;MATE;
X-GNOME-Autostart-enabled=false

Wichtig ist vor allem die letzte Zeile.

Dann einfach einmal ausloggen und wieder einloggen, und der "echte" ssh-agent wird nicht mehr vom gnome-keyring-daemon überschrieben und alles funktioniert wieder wie gewohnt.

Wer es nicht nur für den eigenen Benutzer ändern will, sondern systemweit, der sollte in /etc/xdg/autostart/gnome-keyring-ssh.desktop schauen, dass X-GNOME-Autostart-enabled=false in der Datei enthalten ist (bzw. true auf false ändern).