Gibt es eine Möglichkeit, die Ausführung von zu umgehen oder zu verhindern, ~/.profilewenn 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, ~/.profilewenn 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 --noprofileFlagge zu deaktivieren /etc/profile, ~/.profileusw. und --norczu deaktivieren ~/.bashrcwie 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 --noprofileFlag 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 returnBefehl überspringt den Rest des Skripts, wenn die $SSH_CONNECTIONUmgebungsvariable 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.