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, dan
da sich die Schlüssel in meinem Basisordner und nicht im Basisordner des Stammverzeichnisses befinden.
Also, wenn es diesen Teil erreicht:
git clone [email protected]: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 [email protected]:git-repo $PATH_TO_INSTALLATION
Es wurde jedoch immer noch nach dem Passwort des Hostbenutzers gefragt.
Kann man sagen sudo
, ob man den $SUDO_USER
Heimatpfad des Benutzers benutzt?
Die meisten Dinge sind Variablen und müssen Variablen sein, da ich dies auf mehr als einem Computer ausführen werde.
git clone [email protected]:....
Warum funktioniert es nicht?id_rsa.pub
Schlüsselauthorized_keys
aufhost.com
System. Für den Fall, dass einer der Clonning-Maschinen den Zugriff widerrufen muss, entfernen Sie einfach den Schlüssel.Antworten:
Alternative 1 - sudo konfigurieren
Sudo wird in der
sudoers
Datei konfiguriert, die Sie nur über denvisudo
Befehl bearbeiten sollten .Diese Konfigurationsdatei kann bestimmte Umgebungsvariablen mit der Option überschreiben
env_reset
. So gehen Sie vor:Suchen Sie dann eine Zeile mit folgenden Angaben:
und fügen Sie danach hinzu (z. B. Beispiel mit der HOME-Umgebung):
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/config
und legen Sie ihre Berechtigung festchmod 0600 /root/.ssh/config
:Dann können Sie als root den nächsten Befehl ausführen und es werden die richtigen SSH-Identifikationen verwendet:
quelle
.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./root/.ssh/config: line 3: Bad configuration option: IdentifyFile
IdentifyFile
aber nichtIdentityFile
:-)Da das Skript als Root ausgeführt wird, kann es
su
direkt an den nicht privilegierten Benutzer gesendet werden. Wurzeln müssen nichtsudo
,sudo
ist für lusers ;-).Angenommen, der nicht privilegierte Benutzer ist
dan
und $ PATH_TO_INSTALLATION wird im umgebenden Skript festgelegt:Beachten Sie, dass von geschrieben werden
$PATH_TO_INSTALLATION
mussdan
.quelle
dan
? Beachten Sie das-l
Argumentsu
, um sicherzustellen, dass Sie eine Login-Shell bei sichdan
zu Hause erhalten.su -lc "ssh [email protected]" dan
. Es fragte mich auch nach einem Passwort.-i
Argumentssh
explizit anzugeben, welche private Schlüsseldatei verwendet werden soll?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:
Mit
sudo
Wie in der Antwort von zwets vorgeschlagen
quelle