Gibt es eine Möglichkeit, einen Befehl "als ob" in einer neuen Anmeldesitzung auszuführen?
Ich habe es schon versucht env -i
. Ich möchte mich jedoch nicht mit verschiedenen ENV-Variablen befassen, die ich setzen oder deaktivieren muss.
Ich habe es auch versucht bash -c "some command"
und bash -l -c "some commmand"
, aber alle kopieren die aktuelle Umgebung.
Das nächste, was mir gekommen ist, ist eine Ghettolösung: ssh me@localhost "some command"
/bin/bash --login
, um dieses Verhalten zu erhalten. Ich benutze es zB um ein richtiges zu bekommen$PATH
./bin/bash --l
, was ich bereits versucht habe. Es kopiert die ursprüngliche Umgebung. Probieren Sie es aus :export SOME_VAL=something
. Dann/bin/bash --login
. Dannenv | grep SOME_VAL
. Der Wert wird da sein.Antworten:
Hier ist eine Antwort, die keine Sudo-Berechtigungen oder das Kennwort des Benutzers erfordert, aber dennoch eine Umgebung bietet, wie Sie sie bei einem neuen Login erhalten würden.
Beispiel:
Aufschlüsselung zur Erklärung:
env -i HOME="$HOME"
: Löscht die Umgebung. Das-i
richtet eine leere Umgebung ohne jegliche Variablen ein . Dies ist problematisch, da es bedeutet, dass wenn Sie versuchen, naiv zu laufenbash -l
, Ihr.bash_profile
etc. nicht geladen wird, weilHOME
es nicht eingestellt ist. Um dies zu mildern, übergeben wir explizitHOME="$HOME"
eine Umgebung, in derHOME
(und nurHOME
) festgelegt ist.bash -l -c ...
: Führt den gewünschten Befehl in einer Login-Shell aus. Sie benötigen hierfür eine Login-Shell, da wir von einer sauberen Umgebung ausgehen und alles neu laden müssen.Vor allem:
sudo
Version tut dies).su
Version tut dies).ssh
Version tut dies).quelle
Für etwas noch aggressiveres versuchen
env -i bash
, aber das setzt alles außer $ HOME und $ TERM.quelle
man sudo
und stellte fest: "Wenn der Zielbenutzer mit dem aufrufenden Benutzer identisch ist, ist kein Kennwort erforderlich." (Dersu
scheint immer nach einem Passwort zu fragen.) Ich bin so ein Idiot, dass ich im ersten Absatz einerman
Seite etwas so Einfaches übersehen habe :( Ich habe Sudo an erster Stelle vermieden, weil ich angenommen habe, dass es immer nach einem Passwort gefragt hat. Danke wieder!$USER
sind, müssen Sie sich als root und dannsudo -u ...
als Benutzer anmelden . Wenn Sie nursudo -u
als Benutzer tun, werden Sie erben.sudo
Zugriff haben. Gibt es eine alternative Methode, die kein Sudo erfordert?su -l $USER
.ssh $USER@localhost <command>
es besser funktionieren