Powiedzmy, że ktoś napisał coś na ich temat, .bashrc
co uniemożliwia mu (lub jej) zalogowanie się przez ssh
(tj. Logowanie ssh kończy się z powodu błędu w pliku). Czy istnieje jakikolwiek sposób, w jaki osoba ta mogłaby się zalogować bez jej wykonania (lub .bashrc
ponieważ jedna uruchamia drugą), lub w inny sposób usunąć / zmienić nazwę / unieważnić plik?
Załóżmy, że nie masz fizycznego dostępu do komputera, a jest to jedyne konto użytkownika z możliwością ssh.
Dla odniesienia: .bash_profile
obejmuje .bashrc
:
[[ -f ~/.bashrc ]] && . ~/.bashrc
Edycja: Rzeczy, których próbowałem:
ssh user@host "rm ~/.bashrc"
scp nothing user@host:/RAID/home/tom/.bashrc
ssh user@host "/bin/bash --norc"
Wszyscy podają błąd:
/RAID/home/tom/.bashrc: line 16: /usr/local/bin/file: No such file or directory
/RAID/home/tom/.bashrc: line 16: exec: /usr/local/bin/file: cannot execute: No such file or directory
[ -z "$PS1" ] && return
na początku ./bashrc. W ten sposób scp przestanie parsować .bashrc po pierwszym wierszu i będziesz mógł go zastąpić w nagłych przypadkach.Odpowiedzi:
Myślę, że twoje jedyne opcje to:
ssh jako inny użytkownik i su na swoim koncie;
użyj czegoś takiego jak ftp lub smbclient, jeśli odpowiednie usługi są włączone na hoście;
znajdź otwartą lukę w otwartej usłudze sieciowej i wykorzystaj ją :).
Poproś administratora o naprawienie problemu.
źródło
ssh -t username@hostname /bin/sh
pracuje dla mnie.źródło
.cshrc
/.tcshrc
nawet dla nieinteraktywnych powłok.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ć.
źródło
Użyłem opublikowanego CVE do wykonania polecenia jako root poprzez interfejs sieciowy w zainstalowanym oprogramowaniu do monitorowania sieci.
rm /RAID/home/tom/.bashrc
Następnie mogłem się zalogować i svn cofnąć wprowadzone zmiany.
źródło
Musisz a) rozpocząć bash bez
source
ani jednego,~/.bashrc
ani~/.bash_profile
b) ponieważ taka powłoka nie byłaby pełną powłoką logowania / nie miałaby dołączonego tty , zmusza ssh do dołączenia tty :źródło
ls
przekonać się, że jesteś w :). Zauważ też, że użyje tegodumb
terminu, więc dla mnie nano nie działaNie masz szczęścia.
Wszystkie polecenia ssh uruchamiają powłokę logowania.
ssh $COMMAND
działa$SHELL -c $COMMAND
,scp
działa$SHELL -c /path/to/sftp-server
, zwykłyssh
po prostu uruchamia twoją powłokę.źródło
Żadna z powyższych odpowiedzi nie może ominąć powłoki logowania ssh. Możesz przekazać pełny wiersz poleceń, aby uruchomić zdalną powłokę w celu przetworzenia polecenia i ustawienia środowiska pracy dla polecenia. Po to są powłoki i to jest sposób uniksowy. Miałbyś różnego rodzaju problemy ze zgodnością, gdybyś próbował uruchomić coś bez powłoki. Podobnie, próba C-control powinna zrobić to samo, co wywołanie wyjścia, czyli zachowania, którego próbujesz uniknąć. Jeśli bash będzie kontynuował błąd. Dlaczego ludzie ciągle mówią, że strona podręcznika mówi coś innego, trzeba to zacytować, ponieważ na mojej stronie podręcznika nic takiego nie ma.
Dodatkowo, w większości systemów linuxowych, podanie / bin / sh NIE NIC, ponieważ jest to tylko dowiązanie symboliczne do bash!
Chcesz przetestować? Dodaj instrukcje „echo” do .bashrc i .profile i zobacz, które z nich jest uruchomione. Zrobiłem. Oto wyniki.
ssh user@host
wykona .bash_profilessh user@host /bin/bash
wykona .bashrc, ale uważa, że jest nieinteraktywny (bez pytania).ssh -t user@host /bin/bash
wykonuje .bashrc dwa razy ... raz przy logowaniu, raz dla przekazanej komendy, więc określenie KAŻDEJ powłoki zawsze uruchamia pierwszą.ssh -T user@host
jest tym samym, co brak podania -T lub -t w ogóle.Teraz, jeśli zauważysz, MÓJ system nie uruchamia obu plików, tylko jednego lub drugiego. Ale oryginalny plakat ma linię w .bash_profile z uruchomionym .bashrc, więc .bashrc zawsze uruchomi się bez względu na wszystko. Nie powinienem tam umieszczać tej linii! Gdyby ta linia nie istniała, nie miałbyś problemu.
Musisz znaleźć inną drogę lub administratora. Po to są administratorzy.
źródło
/bin/sh
nie dostać się do wykonania po pierwsze, by pomóc, ponieważ atakujących nie ładować~/.bashrc
przy wywołaniu jakosh
. Ta odpowiedź jest nadzbiorem twojej drugiej odpowiedzi, więc usuń drugą.Coś jak:
co wydaje się działać, ale zauważ, że PS1 nie jest ustawiony, więc będziesz pisać polecenia bez monitu.
Ma to tę zaletę, że jest nieniszczące.
źródło
próbować
^ C jest control-v, a następnie c
źródło
źródło
Mashing Ctrl-C działa tak długo, jak długo możesz dostać Ctrl-C przed wyjściem .bashrc. Niestety może to być trudne, jeśli
exit
jest wczesne .bashrc.Możesz wstawić ctrl-C tak szybko, jak to możliwe, przesyłając bezpośrednio do ssh:
Zauważ, że
^C
jest napisane jak ctrl-V, a następnie ctrl-C.To potokuje pojedynczy klawisz Ctrl-C, a następnie sygnał wejściowy z terminala sterującego, a jednocześnie
-tt
wymusza przydzielenie terminalu psuedo. Wszystko to daje ci (nieco zniekształconą) powłokę na zdalnej maszynie, omijając przy tym jak najwięcej .bashrc.źródło
Możesz spróbować zastąpić
.bash_profile
pusty plik za pomocąscp
polecenia. Z tego, co zalogowałem, scp używa nieinteraktywnego loginu, który nie czyta.bash_profile
.źródło
Możesz także po prostu usunąć plik bashrc:
źródło
Jeśli system jest skonfigurowany normalnie, plik .bash_profile nie zostanie uruchomiony dla powłoki nieinteraktywnej (takiej jak uruchomienie polecenia).
Ponieważ stwierdzasz, że problem występuje w pliku .bash_profile, spróbuj usunąć go z drogi:
źródło
Proszę nie wycinać i biegać, zmiana
user
ihost
, a następnie edytowaćletmein
i zapisać jako.bashrc
źródło
Uznanie dla użytkownika 60069, zadziałało dla mnie, ale używam specyficznego dla powłoki pliku startowego .bashrc, więc logowanie dla mnie za pomocą / bin / sh zadziałało.
Jeśli jednak znajdujesz się w sytuacji „brak szczęścia”, oferuję to rozwiązanie oparte na rozwiązaniach user60069 i Dennis W:
Dennis W zaoferował opcję --norc, która, jak ktoś powiedział, nie działała dla nich.
Uruchom „man bash” lub „man (twoja powłoka)”, aby wyświetlić opcje wyłączenia plików startowych. Musisz użyć odrażającej powłoki na czas potrzebny do rozwiązania problemu.
źródło
Innym sposobem zalogowania się na serwer jest bez profilu, znajdź poniżej polecenia
ssh -t user@host bash --noprofile
W przypadku AWS używającego pliku pem i żadnego innego użytkownika
ssh -ti "YOUR-PEM-FILE-NAME.pem" ec2-user@YOUR-IP-ADDRESS bash --noprofile
Mam nadzieję że to pomoże!
źródło
Z sugestii i odpowiedzi podanych powyżej powiedziałbym, że nie są to pliki .bashrc ani .bash_profile. Również ssh manpage mówi, że jeśli podasz polecenie do wykonania, twoje pliki profilu nie zostaną odczytane.
Proponuję spróbować wykonać inną powłokę logowania (ksh? Csh? Sh?) Niż ścieżka bezwzględna; również uważaj, że może to być zupełnie inny problem (quota? wykonać i odczytać uprawnienia do katalogu domowego?), więc podejście boczne byłoby lepsze. Czy możesz poprosić innego użytkownika o wykonanie
ls -la $YOUR_HOME_DIR
i przesłanie Ci wyniku?źródło