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.
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
Jak wspomnieli inni, uruchamianie bash 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.
Odpowiedzi:
Dla bash:
źródło
-t
Myślę, że będziesz potrzebować również opcji.Jeśli szukasz, aby wyłączyć wszystkie skrypty logowania, można użyć
--noprofile
flagi aby wyłączyć/etc/profile
,~/.profile
itp i--norc
aby wyłączyć~/.bashrc
tak: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
:Najprawdopodobniej spowoduje to przejście do pustej powłoki (bez monitu), więc
ls
upewnij się, że działa.źródło
Jeśli twoja maszyna docelowa jest w powłoce bash:
Alternatywnie, jeśli istnieje inny profil, którego chcesz użyć
źródło
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
źródło
Jak wspomnieli inni, uruchamianie bash z
--noprofile
flagą 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:
return
Będzie pominąć resztę skryptu jeśli$SSH_CONNECTION
zmienna 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/profile
byłyby nadal przetwarzane, chyba że zmodyfikujesz je w podobny sposób.źródło