Gibt es eine Möglichkeit, die Ausführung von zu umgehen oder zu verhindern, ~/.profile
wenn Sie sich mit ssh oder putty bei einem entfernten Linux-Server anmelden?
Gibt es eine Möglichkeit, die Ausführung von zu umgehen oder zu verhindern, ~/.profile
wenn Sie sich mit ssh oder putty bei einem entfernten Linux-Server anmelden?
Antworten:
Wenn Sie alle Anmeldeskripts zu deaktivieren suchen, können Sie das verwenden --noprofile
Flagge zu deaktivieren /etc/profile
, ~/.profile
usw. und --norc
zu deaktivieren ~/.bashrc
wie folgt:
$ ssh 127.0.0.1 "bash --noprofile --norc"
Denken Sie daran, dass Sie auch eine alternative Shell starten können, falls eine verfügbar ist. Ich musste das benutzen, nachdem ich versagt hatte in chsh
:
$ ssh 127.0.0.1 sh
Dadurch werden Sie höchstwahrscheinlich auf eine leere Shell verwiesen (keine Eingabeaufforderung). Geben Sie ein ls
, um sicherzustellen, dass sie funktioniert.
Wenn sich Ihr Zielcomputer in einer Bash-Shell befindet:
user@host:/$ ssh hostname "bash --noprofile"
Alternativ können Sie auch ein anderes Profil verwenden
user@host:/$ ssh hostname "bash --noprofile; source ~/.other_profile"
Versuchen Sie auch, ein FTP-Programm wie WinSCP zu verwenden, um die fehlerhafte Anmeldedatei zu löschen. Dadurch wird es verworfen, aber zumindest sollten Sie sich bei der Standard-Shell anmelden können
Wie andere bereits erwähnt haben, funktioniert es, wenn Sie bash mit dem --noprofile
Flag ausführen, wenn Sie die Verbindung herstellen. Wenn Sie jedoch eine andere Shell verwenden, kann dies eine Option sein oder auch nicht.
Eine Alternative wäre, dass das Profilskript eine SSH-Verbindung selbst erkennt und sich entsprechend verhält. Da SSH-Verbindungen normalerweise eine Reihe von Umgebungsvariablen festlegen, kann dies leicht überprüft werden. Es sollte ausreichen, dem Anfang Ihres Profils so etwas wie die folgenden Zeilen hinzuzufügen:
if [ "$SSH_CONNECTION" != "" ]; then
echo Logging in with ssh
return
else
echo Logging in with something that is not ssh
fi
# rest of your profile goes here
Der return
Befehl überspringt den Rest des Skripts, wenn die $SSH_CONNECTION
Umgebungsvariable festgelegt ist. Diese wird normalerweise erstellt, wenn eine SSH-Verbindung hergestellt wird. Ansonsten wird das Profil wie gewohnt ausgeführt.
Beachten Sie, dass dadurch nur das betroffene Profilskript übersprungen wird. Alle anderen Profilskripte (z. B. /etc/profile
:) werden weiterhin verarbeitet, sofern Sie sie nicht auf ähnliche Weise ändern.