Wenn ich einen Server A habe, in den ich mich mit meinem SSH-Schlüssel einloggen kann und die Fähigkeit habe, "sudo su-otheruser" zu verwenden, verliere ich die Schlüsselweiterleitung, da die env-Variablen entfernt werden und der Socket nur von meinem ursprünglichen Benutzer gelesen werden kann . Gibt es eine Möglichkeit, die Schlüsselweiterleitung über den "sudo su - otheruser" zu überbrücken, damit ich mit meinem weitergeleiteten Schlüssel (in meinem Fall git clone und rsync) Dinge auf einem Server B erledigen kann?
Ich kann mir nur vorstellen, meinen Schlüssel zu authorized_keys von otheruser und "ssh otheruser @ localhost" hinzuzufügen, aber das ist umständlich für jede Benutzer- und Serverkombination, die ich habe.
Zusamenfassend:
$ sudo -HE ssh user@host
(success)
$ sudo -HE -u otheruser ssh user@host
Permission denied (publickey).
user2
oben stehtroot
! Andernfallsuser2
wird SSH_AUTH_SOCK korrekt eingerichtet, aber deruser2
kann nicht auf zB / tmp / ssh-GjglIJ9337 / zugreifen.root
hat diesen Zugang. Das kann also einen Teil des Problems lösen, aber nicht die OPs: " und der Socket ist nur für meinen ursprünglichen Benutzer lesbar"Defaults>root env_keep+=SSH_AUTH_SOCK
Sollte sicherstellen, dass es nur beim Sudoing an root weitergeleitet wird. Sie möchten dies aus Sicherheitsgründen nicht für andere Benutzer tun. Führen Sie besser einen separaten ssh-agent für andere aus und fügen Sie die entsprechenden Schlüssel hinzu.sudo su -
funktioniert bei mir nicht, vermutlich kann die Umgebung nicht erhalten werden, da dies nichtsudo
zum Zeitpunkt des Shell-Starts erfolgt.sudo su
scheint zu funktionieren.sudo su
sowieso verwenden. Wenn Sie eine Root-Shell benötigen, ist das, wassudo -s
odersudo -i
ist für.Dadurch erhalten Sie eine Root-Shell, in der die Originalschlüssel noch geladen sind.
quelle
Ermöglichen Sie anderen Benutzern den Zugriff auf
$SSH_AUTH_SOCK
Dateien und deren Verzeichnis, z. B. durch korrekte Zugriffssteuerungsliste , bevor Sie zu ihnen wechseln. Das Beispiel geht davonDefaults:user env_keep += SSH_AUTH_SOCK
in/etc/sudoers
auf dem Host - Maschine:Sicherer und funktioniert auch für Nicht-Root-Benutzer ;-)
quelle
otheruser
Ihre ssh-Authentifizierung verwenden können.rwx
und nichtrw
(oderr
überhaupt nicht)?man 7 unix
- Linux, das eine Verbindung zum Socket herstellt, benötigt Lese- und Schreibberechtigungen für diesen Socket. Außerdem benötigen Sie die Berechtigung zum Suchen (Ausführen) und Schreiben in dem Verzeichnis, in dem Sie einen Socket erstellen, oder nur die Berechtigung zum Suchen (Ausführen), wenn Sie eine Verbindung zu diesem Socket herstellen. In der obigen Antwort ist die Ausführungsberechtigung für den Socket überflüssig.sudo -u otheruser --preserve-env=HOME -s
Ich habe festgestellt, dass das auch funktioniert.
Wie andere angemerkt haben, funktioniert dies nicht, wenn der Benutzer, zu dem Sie wechseln, keine Leseberechtigung für $ SSH_AUTH_SOCK hat (was so ziemlich jeder Benutzer außer root ist). Sie können dies umgehen, indem Sie $ SSH_AUTH_SOCK und das Verzeichnis festlegen, in dem es die Berechtigungen 777 haben soll.
Das ist allerdings ziemlich riskant. Grundsätzlich erteilen Sie jedem anderen Benutzer im System die Erlaubnis, Ihren SSH-Agenten zu verwenden (bis Sie sich abmelden). Möglicherweise können Sie auch die Gruppe festlegen und die Berechtigungen auf 770 ändern, was möglicherweise sicherer ist. Als ich jedoch versuchte, die Gruppe zu wechseln, wurde die Meldung "Operation nicht zulässig" angezeigt.
quelle
Wenn Sie dazu berechtigt sind
sudo su - $USER
, haben Sie wahrscheinlich ein gutes Argument dafür,ssh -AY $USER@localhost
stattdessen einen mit Ihrem gültigen öffentlichen Schlüssel im Home-Verzeichnis von $ USER ausführen zu dürfen. Dann wird Ihre Authentifizierungsweiterleitung mit Ihnen durchgeführt.quelle
Sie können immer nur ssh an localhost mit Agent-Weiterleitung senden, anstatt sudo zu verwenden:
Nachteil ist, dass Sie sich erneut anmelden müssen, aber wenn Sie es in einem Screen / TMUX-Tab verwenden, ist dies nur ein einmaliger Aufwand. Wenn Sie jedoch die Verbindung zum Server trennen, wird der Socket (natürlich) wieder unterbrochen . Daher ist es nicht ideal, wenn Sie Ihren Bildschirm / Ihre tmux-Sitzung nicht immer offen halten können (Sie können jedoch Ihre
SSH_AUTH_SOCK
env var manuell aktualisieren, wenn Sie cool sind).Beachten Sie auch, dass Root bei Verwendung der SSH-Weiterleitung immer auf Ihren Socket zugreifen und Ihre SSH-Authentifizierung verwenden kann (sofern Sie mit SSH-Weiterleitung angemeldet sind). Stellen Sie also sicher, dass Sie root vertrauen können.
quelle
otheruser
viasudo
anstatt über SSH haben (z. B. möchten Sie Sachen als SCPwww-data
)Verwenden Sie nicht
sudo su - USER
, sondernsudo -i -u USER
. Funktioniert bei mir!quelle
Sudo version 1.6.9p17
läuft auf Debian Lenny. Versuchensudo -s
?sudo -s
nochsudo -i
für mich arbeiten ...Kombiniere Informationen aus den anderen Antworten, die mir eingefallen sind:
Ich mag das, weil ich keine
sudoers
Datei bearbeiten muss .Getestet auf Ubuntu 14.04 (musste
acl
Paket installieren ).quelle
Ich denke, es gibt ein Problem mit der
-
(Bindestrich) -Option nachsu
in Ihrem Befehl:Wenn Sie die Manpage von su lesen , werden Sie möglicherweise feststellen, dass die Option
-, -l, --login
die Shell-Umgebung als Login-Shell startet. Dies wird die Umgebung fürotheruser
unabhängig von den Umgebungsvariablen , in denen Sie ausgeführt werdensu
.Einfach ausgedrückt, untergräbt der Strich alles, was Sie passiert haben
sudo
.Versuchen Sie stattdessen diesen Befehl:
Wie @ joao-costa hervorhob,
-E
werden alle Variablen in der Umgebung, in der Sie ausgeführt haben, beibehaltensudo
. Dann ohne den Bindestrichsu
wird diese Umgebung direkt verwendet.quelle
Wenn Sie sich an einen anderen Benutzer wenden (oder sogar sudo verwenden), verlieren Sie leider die Möglichkeit, Ihre weitergeleiteten Schlüssel zu verwenden. Dies ist eine Sicherheitsfunktion: Sie möchten nicht, dass zufällige Benutzer eine Verbindung zu Ihrem ssh-agent herstellen und Ihre Schlüssel verwenden :)
Die Methode "ssh-Ay $ {USER} @localhost" ist etwas umständlich (und wie in meinem Kommentar zu Davids Antwort erwähnt, die zu Brüchen neigt), aber wahrscheinlich die beste, die Sie tun können.
quelle
-a
und-A
Argumente.-a
Um genau das Gegenteil von dem zu erreichen, was beabsichtigt ist, wird die Agentenweiterleitung deaktiviert. Verwenden Sie daher unter der neuesten (und möglicherweise allen) Version von Ubuntu, um-A
die Agentenweiterleitung zu aktivieren.