Pomiń ~ / .profile przy zdalnym logowaniu do serwera Linux

32

Czy istnieje sposób obejścia lub uniemożliwienia wykonania ~/.profilepodczas logowania do zdalnego serwera Linux przy użyciu ssh lub putty?

Andrew Hampton
źródło
Dlaczego chcesz to zrobić? Dlaczego nie edytować wartości w pliku? (W końcu to twój profil.)
Telemachus
7
Jest to przydatne na przykład, jeśli ktoś spieprzył plik .profile i nie masz bezpośredniego dostępu do systemu :)
monkey_p
Dokładnie taką sytuację znalazłem w monkey_p
Andrew Hampton

Odpowiedzi:

30

Dla bash:

$ ssh hostname "bash --noprofile"
massysett
źródło
6
-tMyślę, że będziesz potrzebować również opcji.
grawity
2
ssh -t nazwa hosta „bash --noprofile” .Jeżeli nie było, otrzymałem błąd „standard w musi być tty”.
nitiny
14

Jeśli szukasz, aby wyłączyć wszystkie skrypty logowania, można użyć --noprofileflagi aby wyłączyć /etc/profile, ~/.profileitp i --norcaby wyłączyć ~/.bashrctak:

$ ssh 127.0.0.1 "bash --noprofile --norc"

Pamiętaj, że możesz również uruchomić alternatywną powłokę, jeśli jest dostępna. Musiałem z tego skorzystać po tym, jak zepsułem chsh:

$ ssh 127.0.0.1 sh

Najprawdopodobniej spowoduje to przejście do pustej powłoki (bez monitu), więc lsupewnij się, że działa.

Jack M.
źródło
4

Jeśli twoja maszyna docelowa jest w powłoce bash:

user@host:/$ ssh hostname "bash --noprofile"

Alternatywnie, jeśli istnieje inny profil, którego chcesz użyć

user@host:/$ ssh hostname "bash --noprofile; source ~/.other_profile"
Nick Stinemon
źródło
1

Spróbuj także użyć programu FTP, takiego jak WinSCP, aby usunąć błędny plik logowania. Spowoduje to jego odrzucenie, ale przynajmniej powinieneś być w stanie zalogować się do domyślnej powłoki

Sphiros O'Kelli
źródło
a może po prostu zmień jego nazwę.
jezmck
1

Jak wspomnieli inni, uruchamianie z --noprofileflagą podczas inicjowania połączenia będzie działać, chociaż jeśli używasz innej powłoki, może to być opcja.

Alternatywą byłoby, aby skrypt profilu sam wykrywał połączenie SSH i zachowywał się odpowiednio. Ponieważ połączenia SSH zwykle ustawiają wiele zmiennych środowiskowych, można to łatwo sprawdzić. Wystarczy dodać coś takiego jak następujące linie na początku swojego profilu:

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

returnBędzie pominąć resztę skryptu jeśli $SSH_CONNECTIONzmienna jest ustawiona, które normalnie byłyby utworzone, gdy połączenie jest inicjowane SSH. W przeciwnym razie profil będzie działał normalnie.

Pamiętaj, że spowoduje to pominięcie tylko skryptu profilu, którego dotyczy problem. Wszystkie inne skrypty profilowe (np .:) /etc/profilebyłyby nadal przetwarzane, chyba że zmodyfikujesz je w podobny sposób.

goldPseudo
źródło