
Ich möchte den echten SSH-Agenten anstelle des Gnome-Schlüsselbunds in Xubuntu verwenden. Ich habe die Schritte von befolgthttp://dtek.net/blog/wie-stoppt-gnome-keyring-clobbering-opensshs-ssh-agent-ubuntu-1204, aber Gnome Keyring registriert sich immer noch als SSH-Agent. Ich möchte Gnome Keyring weiterhin für andere Passwörter verwenden
Antwort1
Es stellt sich heraus, dass, wenn die Gnome-Kompatibilität in xfce aktiviert ist, xfce4-session den Gnome-Keyring-Daemon unbedingt startet. Dies ist fest codiert, es gibt derzeit keine Möglichkeit, dies zu konfigurieren. Das Deaktivieren des Gnome-Kompatibilitätsmodus führt dazu, dass der Schlüsselring beim Anmelden nicht gestartet wird und Sie Ihr Passwort erneut eingeben müssen, wenn Sie ihn starten.
Die einfachste Lösung scheint darin zu bestehen, den Aufruf des Gnome-Keyring-Daemon abzufangen und ein Skript einzufügen, das das Flag in die Argumente einfügt, --components
um zu verhindern, dass der Gnome-Keyring Ssh-Add ersetzt.
Führen Sie Folgendes aus, um den Gnome-Keyring-Daemon zu verschieben:
sudo mv /usr/bin/gnome-keyring-daemon /usr/bin/gnome-keyring-daemon-wrapped
Erstelle einen neuen Gnome-Keyring-Daemon mit
sudo nano /usr/bin/gnome-keyring-daemon
und fügen Sie den folgenden Inhalt ein:
#!/bin/sh
exec /usr/bin/gnome-keyring-daemon-wrapped --components=pkcs11,secrets,gpg "$@"
Machen Sie den neuen Gnome-Keyring-Daemon mit ausführbar sudo chmod +x /usr/bin/gnome-keyring-daemon
.
Jetzt versucht der Gnome-Schlüsselbund nicht mehr, ssh-add zu ersetzen.
Beachten Sie, dass beim Upgrade Ihres Systems der standardmäßige Gnome-Keyring-Daemon wiederhergestellt wird. Daher müssen Sie die obigen Schritte nach dem Upgrade wahrscheinlich erneut ausführen.
bearbeiten:
In xubuntu 14.10 funktioniert der Start etwas anders, da gkd auch von der Sitzung upstart gestartet wird. Es ist möglich, die Upstart-Konfiguration zu überschreiben, sodass die SSH-Komponente nicht gestartet wird, aber trotzdem startet gkd seine SSH-Komponente, wenn xfce4-session auch versucht, sie zu starten. Wenn Sie also möchten, dass xfce auch automatisch Gnome-Dienste startet, benötigen Sie trotzdem den obigen Hack. Eine Alternative besteht darin, Gnome-Dienste zu deaktivieren (Einstellungen -> Sitzung und Start -> Erweitert -> GNOME-Dienste beim Start starten), Upstart so zu konfigurieren, dass gkd mit dem --components=pkcs11,secrets,gpg
Flag gestartet wird, und optional auch die Gnome-Dienste zu konfigurieren, die Sie manuell starten möchten.
(Abgesehen von den beiden oben genannten Stellen, die gkd starten, wird der gk-Daemon vorher auch von lightdm/PAM aus gestartet, um das Anmeldekennwort des Benutzers zu erhalten. Durch diesen Start wird gkd jedoch nicht vollständig konfiguriert und es wird erwartet, dass es bei einem zweiten Startversuch vollständig konfiguriert ist, sodass dieser Startversuch für das aktuelle Problem nicht relevant ist.)
Antwort2
Es ist ein alter Thread, aber mein Workaround für dieses Problem unter Xubuntu 14.04 ist einfach, indem ich einfach gnome-keyring-daemon
bei Sitzung und Start neu starte. Was Sie tun müssen, ist einfach den folgenden Befehl auszuführen:
$ gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg
Wir entfernen „ssh“ aus der Komponente des Gnome-Schlüsselbunds.
- Gehen Sie zu Menü > Einstellungen > Sitzung und Start
- Klicken Sie auf die Registerkarte „Anwendungs-Autostart“
- Klicken Sie auf die Schaltfläche Hinzufügen
- Es wird ein neues Anwendungsfenster angezeigt. Sie können es wie im folgenden Beispiel ausfüllen.
- Name: SSH-Schlüsselring-Entferner
- Beschreibung: SSH aus dem GNOME-Schlüsselbund entfernen
- Befehl:
gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg
- OK klicken
Versuchen Sie, sich von Ihrer XFCE-Sitzung abzumelden und erneut anzumelden. Um sicherzustellen, dass der Gnome-Schlüsselbund SSH nicht mehr verwaltet, führen Sie einfach Folgendes aus.
$ ssh-add -l
Could not open a connection to your authentication agent.
Wenn Sie diese Nachricht erhalten, bedeutet dies, dass der Gnome-Schlüsselbund Ihr SSH nicht verwaltet und Sie die ursprüngliche OpenSSH-SSH-Agent-Implementierung verwenden können.
Antwort3
Um auf der Antwort von @JanKanis aufzubauen, habe ich es auf xfce4-session zurückgeführt, das für die Initiierung des Befehls gnome-keyring-daemon --start verantwortlich ist.
Bei dieser Ausführung prüft der Gnome-Keyring-Daemon nicht, ob SSH_AUTH_SOCK bereits festgelegt ist. Dies ist ein „Feature“, da dann sowohl der SSH-Agent als auch der Gnome-Keyring-Daemon einen Socket bereitstellen können.
Das wichtigste zuerst:
Hinzufügen ~/.config/upstart/gnome-keyring.conf
:
description "GNOME Keyring agents"
author "Dimitri John Ledkov <[email protected]>"
start on (starting xsession-init or starting ssh-agent or starting gpg-agent) and started dbus
task
script
# Stop because I say so
stop; exit 0
eval "$(gnome-keyring-daemon --start)" >/dev/null
initctl set-env --global SSH_AUTH_SOCK=$SSH_AUTH_SOCK
initctl set-env --global GPG_AGENT_INFO=$GPG_AGENT_INFO
end script
Ersetzen Sie nun gnome-keyring-daemon durch einen Wrapper (ich habe das Original nach /usr/libexec/ verschoben):
#!/bin/sh
gkd=/usr/libexec/gnome-keyring-daemon
debug=1
log=${XDG_CACHE_HOME:-"${HOME}/.cache"}/gkd.log
if [ ${debug} -gt 0 ]
then
echo "================" >> ${log}
echo "Invoked as $0 $@" >> ${log}
echo "================" >> ${log}
/usr/bin/pstree -lag >> ${log}
fi
case "$@" in
*--start*)
$gkd --components=pkcs11,secrets,gpg "$@"
;;
*)
$gkd "$@"
;;
esac
if [ ${debug} -gt 0 ]
then
/usr/bin/pstree -lag >> ${log}
fi
Der Debug-Code ist da, damit Sie herausfinden können, warum es nicht mehr funktioniert. Da keines dieser Programme über vernünftige Konfigurationsmethoden verfügt, kommen Sie um das Hacken von Befehlen nicht herum. In diesem Fall kann ich keine dokumentierte Konfigurationsmethode für xfce4-session finden, um gnome-keyring-daemon --start nicht aufzurufen, die keine anderen Nebenwirkungen hat. Sie alle machen Annahmen über Dinge, die installiert werden, und lesen daher die Gedanken des Benutzers.
Antwort4
Hier ist eine weniger invasive Version des Skripts, das JanKanis gepostet hat. Es akzeptiert alle Komponenten, die ihm übergeben wurden, entfernt aber die SSH-Komponente.
#!/bin/bash
ARGS="$@"
COMPONENTS=""
if [[ $ARGS =~ \-\-components= ]]; then
component_match_expression='(\-\-components=([0-9a-z,]+))'
COMPONENTS=$(echo $ARGS | grep -oP "$component_match_expression")
ARGS=$(echo $ARGS | sed -E "s/$component_match_expression//")
COMPONENTS="--components=$(echo $COMPONENTS | grep -oP '(?<=\-\-components=)([0-9a-z,]+)' | sed -e 's/ssh//' -e 's/,,/,/')"
if [ "$COMPONENTS" != "--components=" ]; then
ARGS="$ARGS $COMPONENTS"
else
exit 0
fi
fi
/usr/bin/gnome-keyring-daemon-wrapped $ARGS