~ / .Profile bei der Remote-Anmeldung an einem Linux-Server umgehen
32
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?
Sie werden auch die -tOption brauchen , denke ich.
Grawity
2
ssh -t hostname "bash --noprofile". Wenn -t nicht da war, wurde der Fehler "standard in must be a tty" angezeigt.
Nitins
14
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.
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.
Antworten:
Für die Bash:
quelle
-t
Option brauchen , denke ich.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: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
:Dadurch werden Sie höchstwahrscheinlich auf eine leere Shell verwiesen (keine Eingabeaufforderung). Geben Sie ein
ls
, um sicherzustellen, dass sie funktioniert.quelle
Wenn sich Ihr Zielcomputer in einer Bash-Shell befindet:
Alternativ können Sie auch ein anderes Profil verwenden
quelle
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
quelle
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:
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.quelle