Czy istnieje sposób obejścia lub uniemożliwienia wykonania ~/.profile
podczas logowania do zdalnego serwera Linux przy użyciu ssh lub putty?
Czy istnieje sposób obejścia lub uniemożliwienia wykonania ~/.profile
podczas logowania do zdalnego serwera Linux przy użyciu ssh lub putty?
Odpowiedzi:
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:
$ 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 ls
upewnij się, że działa.
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"
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 --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:
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
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.