Spieprzyłem, wyjdź w .bashrc

27

Umieszczam „exit” w moim pliku .bashrc. Nie mam fizycznego dostępu do komputera, więc aby się z nim połączyć, używam ssh. Nie mam uprawnień roota. Za każdym razem, gdy łączę się z serwerem, połączenie automatycznie się zamyka.

Do tej pory próbowałem:

  • Nadpisywanie .bashrc za pomocą scp i sftp. Połączenie zostanie zamknięte, zanim będę mógł cokolwiek zrobić.
  • Korzystanie z kilku różnych programów GUI w celu uzyskania dostępu do ssh (połączenie zostaje zamknięte)
  • Nadpisywanie pliku ftp. (nie można użyć ftp)
  • Z mojego domowego komputera
    • $ ssh host "bash --noprofile --norc" (połączenie zostaje zamknięte)
    • $ ssh host "mv .bashrc bashrc_temp" (połączenie zostaje zamknięte)
    • $ ssh host "rm .bashrc" (to samo)
    • $ ssh host -t (połączenie zostaje zamknięte)

Czy jest coś, co mogę zrobić, aby wyłączyć .bashrc, a może nadpisać plik przed uzyskaniem .bashrc?

AKTUALIZACJA

@ ring0

Próbowałem twojej sugestii, ale bez powodzenia. Plik bashrc nadal działa jako pierwszy.

Inną rzeczą, którą próbowałem, było zalogowanie się na inne konto i edycja sudo .bashrc, ale nie mam uprawnień sudo na tym koncie.

Chyba skontaktuję się z administratorem.

EDYTOWAĆ

@shellholic

Nie mogę w to uwierzyć, ale to podejście zadziałało! Choć „exit” występuje w ciągu pierwszych kilku liniach (składa się tylko z kilku jeśli bloki i eksport oświadczenia) w pliku .bashrc, nadal udało się CTRL-C przerwania go pomyślnie w ciągu dwudziestu próbach (trwało około 3 minut). Usunąłem obrażającą linię w .bashrc i wszystko znów działa.

camel_space
źródło
2
darwinawards.com powinieneś mieć (tymczasowy) dostęp jako użytkownik, który może zastąpić plik .bashrc lub zmienić domyślną powłokę na coś innego. „Zapytaj administratora systemu”, jak mówi MS.
2
man 8 sshdmówi, że to 9. Runs user's shell or command.jako dziewiąty krok ...: - /
1
scp również przestanie działać, ponieważ powłoka nadal się otwiera i wywoływany jest plik .bashrc
Aleksandr Levchuk
FYI powodem, dla którego większość z tych sugestii nie działa, jest to, że ssh wykonuje dowolne polecenie, przekazując je jako argument do powłoki użytkownika. Wyszukaj polecenie wykonania w sesji. C. Nie ma sposobu na modyfikację / dodanie / usunięcie argumentów tego wywołania powłoki użytkownika.
Mark Wagner,

Odpowiedzi:

37

możesz spróbować przerwać (ctrl + C) przed wykonaniem części wyjścia .bashrc.

Próbowałem, dodając następujące na górze bashrc testusera, działa, to tylko kwestia czasu. Bardzo łatwe w moim przypadku:

sleep 3
echo "Too late... bye"
exit 0
shellholic
źródło
8
+1, ponieważ to prawdopodobnie jedyne rozwiązanie, które nie wymaga pomocy administratora systemu. Jednak potrzeba dużo szczęścia, aby mieć prawidłową synchronizację (host ssh -v może trochę pomóc).
JooMing
Właściwie ctrl + C działało. Nawet bez snu. Umieściłem „exit” w moim bashrc i udało mi się odzyskać za pomocą szybkiego ctrl + C po około 4 próbach. Zmodyfikuj odpowiedź, aby zmienić „-1” na „+1”.
Aleksandr Levchuk
@Aleksandr Levchuk zrobiony
shellholic
4
Bardzo doceniam połączenie żałośnie absurdalnej technologii i brutalnej skuteczności.
unixtippse
1
Śmieję się jak szalony, ten pośpiech, kiedy w końcu działa. Dzięki @JooMing, wypróbowałem wszystkie metody stąd serverfault.com/questions/94503/... nawet ta z naciśnięciem Ctrl + C, ale zadziałało to dopiero po dodaniu opcji -v!
mxmlnkn
12

Udało mi się też zepsuć mój plik .bashrc w nowym klastrze, do którego otrzymałem dostęp próbny. Nie chcąc wydawać się noobem, ostatnią rzeczą, którą chciałem zrobić, było poproszenie o pomoc administratorów i nie mogłem uzyskać odpowiednio dobranego czasu ^ + C do pracy.
Jednak zadziałało wysłanie komendy „rm” jako ostatecznego argumentu do ssh. to znaczy

ssh -tv user@host rm .bashrc

Nie mogłem uruchomić polecenia „mv” (wypróbowanego wcześniej bez -t), więc myślę, że opcja -t musiała to zrobić, ale możesz to przetestować, jeśli chcesz. Teraz odzyskałem z pliku .bashrc ~ (utworzonego przez vima) wszystko oprócz podejrzanej linii i wszystko jest na świecie! = D.

Alex Leach
źródło
2
ssh -tv user@home mv .bashrc .bashrc-oldpracował dla mnie
Code Commander
3

Jeśli możesz zalogować się jako inny użytkownik, spróbuj tego:

su user -s /bin/sh

Oczywiście potrzebujesz hasła.

Cakemox
źródło
1
możesz wypróbować inną powłokę, nie opartą na sh: kshlubcsh
Hubert Kario
3

Jeśli przypomnę sobie jakieś złe doświadczenia, które miałem w ten sposób, ssh, scp, sftp wydają się uruchamiać pliki inicjujące.

Moją propozycją jest użycie prostego FTP, a następnie usunięcie lub zmiana nazwy niepoprawnego pliku w wierszu poleceń FTP po zalogowaniu. Zakładam, że twój system pozwoli ci na dostęp przez FTP. W takim przypadku pamiętaj o zmianie hasła (bezpiecznie) po zakończeniu naprawy.

mdpc
źródło
Filezilla działała idealnie do tego. Wystarczy rozwinąć menu „Serwer” i wybrać ustawienie „Pokaż ukryte pliki”.
Danny G
1

Od man ssh( OpenSSH_5.6p1przynajmniej nie jestem pewien, kiedy został dodany),

~/.ssh/rc
        Commands in this file are executed by ssh when the user logs in, just
        before the user's shell (or command) is started.  See the sshd(8) manual
        page for more information.

.. co oznacza, że ​​możesz utworzyć ~/.ssh/rczawierający następujące elementy:

mv ~/.bashrc ~/bak.bashrc

Następnie, gdy wejdziesz ssh, problematyczne bashrc zostanie przeniesione na bok, przed uruchomieniem powłoki logowania - wtedy możesz oczywiście naprawić bak.bashrci przenieść ją z powrotem na miejsce

dbr
źródło
0

Połącz przez SCP lub SFTP i edytuj / zmień nazwę / usuń plik .bashrc w ten sposób. Edytuj - D'oh, widzę, że powiedziałeś, że próbowałeś tego. No cóż.

mfinni
źródło
0

Miałem ten sam problem i jakoś byłem w stanie go rozwiązać. Użyłem ssh, aby uzyskać dostęp do systemu, i nacisnąłem i przytrzymałem Ctrl + c, jak tylko się zalogowałem. Wtedy ~ / .bashrc nie został odczytany i mogłem go zmodyfikować.

Miyashin
źródło
1
Dokładny duplikat najbardziej uprzywilejowanej odpowiedzi tutaj
Pauska
0

Znalazłem to działające.

Przerwij program ładujący grub, naciskając e ... ponownie naciśnij e, aby wprowadzić linie ładujące grub, ponownie naciśnij e, aby edytować linię jądra,

idź do końca linii;

dodaj init = / bin / bash na końcu linii,

Enter, aby wrócić, b, aby uruchomić,

otworzy powłokę bash, otworzy vim /root/.bashrc i odpowiednio edytuje. wyjdź, a teraz będziesz mógł się zalogować

Haseeb
źródło