~ / .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?

Andrew Hampton
quelle
Warum willst du das tun? Warum nicht einfach die Werte in der Datei bearbeiten? (Immerhin ist es Ihr Profil.)
Telemachus
7
Dies ist zum Beispiel nützlich, wenn jemand die .profile-Datei vermasselt hat und Sie keinen direkten Zugriff auf das System haben :)
monkey_p
Das ist genau die Situation, in der ich mich in monkey_p befand
Andrew Hampton

Antworten:

30

Für die Bash:

$ ssh hostname "bash --noprofile"
massysett
quelle
6
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.

Jack M.
quelle
4

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"
Nick Stinemates
quelle
1

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

Sphiros O'Kelli
quelle
oder vielleicht einfach umbenennen.
Jezmck
1

Wie andere bereits erwähnt haben, funktioniert es, wenn Sie mit dem --noprofileFlag 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.

goldPseudo
quelle