Wie kann ich SSH als ein anderer Benutzer in derselben Ubuntu-Installation ausführen?


7

Ich erstelle ein Skript, das eine Reihe von Befehlen ausführt, die eine Website auf einen Computer herunterladen und alles einrichten.

Daher erfordern die meisten Befehle Root-Zugriff. Zum Beispiel einen vhost hinzufügen /etc/apache2/sites-available, aktivieren, Apache neu starten usw.

Dazu muss ich das Skript mit ausführen sudo.

sudo ./install-website.sh

Die Website befindet sich auf einem Server mit einem Git-Repository, das mit einem kennwortlosen SSH-Zugriff eingerichtet ist. Dies funktioniert jedoch nur für den Benutzer, danda sich die Schlüssel in meinem Basisordner und nicht im Basisordner des Stammverzeichnisses befinden.

Also, wenn es diesen Teil erreicht:

git clone user@host.com:git-repo $PATH_TO_INSTALLATION

Seit ich das Skript mit gestartet habe sudo, ist der Benutzer, der versucht, den Befehl git zu initiieren, root. Der Host fragt also immer wieder nach dem Passwort des Hostbenutzers.

Ich habe den folgenden Befehl ausprobiert:

sudo -u $SUDO_USER git clone user@host.com:git-repo $PATH_TO_INSTALLATION

Es wurde jedoch immer noch nach dem Passwort des Hostbenutzers gefragt.

Kann man sagen sudo, ob man den $SUDO_USERHeimatpfad des Benutzers benutzt?

Die meisten Dinge sind Variablen und müssen Variablen sein, da ich dies auf mehr als einem Computer ausführen werde.


Ich vermute, Sie versuchen das: git clone dan@host.com:....Warum funktioniert es nicht?
Huygens

Bevorzugte Weg wäre, Wurzel hinzufügen id_rsa.pubSchlüssel authorized_keysauf host.comSystem. Für den Fall, dass einer der Clonning-Maschinen den Zugriff widerrufen muss, entfernen Sie einfach den Schlüssel.
PeterM

Antworten:


4

Alternative 1 - sudo konfigurieren

Sudo wird in der sudoersDatei konfiguriert, die Sie nur über den visudoBefehl bearbeiten sollten .

Diese Konfigurationsdatei kann bestimmte Umgebungsvariablen mit der Option überschreiben env_reset. So gehen Sie vor:

visudo

Suchen Sie dann eine Zeile mit folgenden Angaben:

Defaults env_reset 

und fügen Sie danach hinzu (z. B. Beispiel mit der HOME-Umgebung):

Defaults env_keep = "HOME"

Dieses Beispiel gilt für jede Sudo-Konfiguration, die Sie möglicherweise haben. Sie können es auch pro Benutzer / Gruppe angeben. Siehe sudoers Handbuchseite .

Alternative 2 - SSH konfigurieren

Sie können die Konfigurationsdatei von SSH verwenden, um Benutzer, zu verwendende Schlüssel usw. anzugeben. Ich habe dies bei SuperUser erklärt .

Vorgeschlagene Lösung (aber Sie müssen die fehlenden und angenommenen Bits korrigieren), bearbeiten Sie die Datei /root/.ssh/configund legen Sie ihre Berechtigung fest chmod 0600 /root/.ssh/config:

Host host.com
  User dan
  IdentityFile /home/dan/.ssh/id_rsa

Dann können Sie als root den nächsten Befehl ausführen und es werden die richtigen SSH-Identifikationen verwendet:

git clone host.com:git-repo $PATH_TO_INSTALLATION

Ich würde es vorziehen, die Systemkonfigurationen nicht zu ändern, damit das Skript funktioniert, da ich auf mehreren Computern ausgeführt werden möchte und nicht alle konfigurieren möchte.
Dan

Dann sollten Sie in der Lage sein, Alternative 2 zu verwenden. Es gibt keine Standarddatei .ssh/config, sodass Sie eine mit Ihrem Skript versenden oder eine aus Ihrem Skript erstellen können. Sie können sehen, dass Sie in dieser Datei explizit angeben können, wo Sie Ihren generierten SSH-Schlüssel gespeichert haben, ohne dass Sie ihn an einem Standardspeicherort haben müssen.
Huygens

Ich habe diese Lösung für eine Weile versucht und versucht, alles zu beheben, was falsch sein könnte. Aber ich bekomme immer wieder den folgenden Fehler:/root/.ssh/config: line 3: Bad configuration option: IdentifyFile
Dan

Sie haben einen Tippfehler, es ist IdentifyFileaber nicht IdentityFile:-)
Huygens

Ich denke, es ist Zeit, meine Augen überprüfen zu lassen! Danke, dass es funktioniert
Dan

3

Da das Skript als Root ausgeführt wird, kann es sudirekt an den nicht privilegierten Benutzer gesendet werden. Wurzeln müssen nicht sudo, sudoist für lusers ;-).

Angenommen, der nicht privilegierte Benutzer ist danund $ PATH_TO_INSTALLATION wird im umgebenden Skript festgelegt:

su -lc "git clone user@host.com:git-repo $PATH_TO_INSTALLATION" dan

Beachten Sie, dass von geschrieben werden $PATH_TO_INSTALLATIONmuss dan.


Dies fragt mich auch immer wieder nach dem Passwort des Host-Benutzers
Dan

@ Dan Aber nicht, wenn Sie dies als ausführen dan? Beachten Sie das -lArgument su, um sicherzustellen, dass Sie eine Login-Shell bei sich danzu Hause erhalten.
zwets

Ja, ich habe es so versucht wie es ist. Ich habe sogar den folgenden Befehl ausprobiert und dachte, es könnte ein Git-Problem sein. su -lc "ssh user@host.com" dan. Es fragte mich auch nach einem Passwort.
Dan

Und wenn Sie sich nach einem Neustart an einer Konsole (nicht an der GUI) als dan anmelden (also speichert kein ssh-agent etwas zwischen) und "ssh user@host.com" ausführen, werden Sie nicht nach einem Kennwort gefragt ?
zwets

Ich gehe davon aus, dass Sie eine passwortlose private Schlüsseldatei in .ssh haben, richtig? Haben Sie versucht, mit dem -iArgument sshexplizit anzugeben, welche private Schlüsseldatei verwendet werden soll?
zwets

0

Als ich vor langer Zeit meinen SSH-Schlüssel mit generiert habe ssh-keygen, habe ich nicht den Standardpfad gewählt ~/.ssh/id_rsa. Dank zwets ' Kommentar habe ich mich daran erinnert. Ich änderte meinen Schlüssel und steckte ihn ein ~/.ssh/id_rsa.

Jetzt funktionieren beide Befehle:

  1. Mit sudo

    sudo -u $SUDO_USER git clone user@host.com:git-repo $PATH_TO_INSTALLATION
    
  2. Wie in der Antwort von zwets vorgeschlagen

    su -lc "git clone user@host.com:git-repo $PATH_TO_INSTALLATION" $SUDO_USER
    
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.