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?


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"

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.


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"

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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.