
Ich habe ein öffentliches und privates Schlüsselpaar, das ~/.ssh
für die SSH-Verbindung zu GitHub verwendet wird.
Um zu testen, ob ich SSH mit GitHub richtig eingerichtet habe, habe ich verwendet , was einwandfrei funktioniert.ssh -T [email protected]
Auch wenn ich den obigen Befehl als Superuser ausführe, funktioniert es einwandfrei.
su
ssh -T [email protected]
Wenn ich jedoch sudo verwende, funktioniert der Befehl nicht. Ich vermute, dass er nicht auf das Schlüsselpaar zugreifen kann, das unter gespeichert ist, wenn er ~/.ssh
mit ausgeführt wirdsudo
Der folgende Befehl schlägt fehl.
sudo ssh -T [email protected]
Sie können das Problem problemlos mit jeder Ubuntu-Distribution reproduzieren undDasGitHub-Hilfeseite.
Bearbeiten:
Ich verstehe, dass ich den privaten Schlüssel ssh
wie folgt weitergeben kann:
ssh -i <path-to-private-key> -T [email protected]
Ich frage mich nur, warum der private Schlüssel durch die Verwendung unzugänglich wird.sudo ssh -T [email protected]
Antwort1
Hypothese: Für Ihren regulären Benutzer wird ein Authentifizierungsagent ausgeführt und der Agent besitzt den Schlüssel.
ssh
von einer Shell ohne erhöhte Rechte erzeugt, erbt die entscheidende Umgebungsvariable SSH_AUTH_SOCK
, die ihm den Speicherort des Sockets für die Kommunikation mit dem Agenten angibt. ssh
kann den Agenten verwenden. So verwenden Sie einen Agenten normalerweise.
su
hebt die Variable nicht auf. ssh
after su
kann den Socket dank der Variable lokalisieren. Normalerweise kann auf den Socket nur der Besitzer zugreifen, aber jetzt ssh
läuft er als Root und Root kann auf (fast) jede Datei zugreifen, unabhängig von ihren Berechtigungen.
sudo
tuthebt die Variable auf (standardmäßig; sieheDasUndDas). ssh
in sudo ssh …
kann den Socket nicht finden. Es ist, als wäre der Agent nicht da. ssh
versucht, den richtigen privaten Schlüssel an einigen Standardspeicherorten in zu finden ~/.ssh
, sucht jetzt aber im Stammverzeichnis und nicht im Stammverzeichnis Ihres normalen Benutzers, wo sich der richtige private Schlüssel befindet.
Antwort2
Sie können den Pfad zu Ihrer Identitätsdatei mit der Option -i an ssh übergeben.
ssh user@host -i /path/to/keyfile