Frage Melden Sie sich an, ohne bash_profile oder bashrc auszuführen


Lassen Sie uns also sagen, dass Sie etwas in ihre geraten haben .bashrc das hindert ihn (oder sie) daran, sich einzuloggen ssh (d. h. die ssh-Anmeldung wird wegen des Fehlers in der Datei beendet). Gibt es eine Möglichkeit, dass sich diese Person einloggen könnte, ohne sie auszuführen (oder? .bashrc da der eine den anderen ausführt), oder sonst löschen / umbenennen / die Datei ungültig machen?

Angenommen, Sie haben keinen physischen Zugriff auf den Computer, und dies ist das einzige Benutzerkonto, das die Möglichkeit hat, sich anzumelden.

Als Referenz: .bash_profile beinhaltet .bashrc:

[[ -f ~/.bashrc ]] && . ~/.bashrc

Edit: Dinge, die ich versucht habe:

ssh user@host "rm ~/.bashrc"

scp nothing user@host:/RAID/home/tom/.bashrc

ssh user@host  "/bin/bash --norc"

Alle geben den Fehler:

/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

66
2017-12-15 12:03


Ursprung


Ihr scp-Befehl funktioniert nicht, da scp bei der Verbindung auch .bashrc liest. Um das Problem zu vermeiden, können Sie in Zukunft etwas hinzufügen [ -z "$PS1" ] && return am Anfang von ./bashrc. Auf diese Weise stoppt scp nach der ersten Zeile die Analyse von .bashrc und Sie können sie im Notfall überschreiben. - dalloliogm


Antworten:


Ich denke, deine einzigen Optionen sind:

  • ssh als ein anderer Benutzer und su zu deinem Konto;

  • Verwenden Sie etwas wie ftp oder smbclient, wenn die relevanten Dienste auf dem Host aktiviert sind;

  • finde eine offene Sicherheitslücke in einem offenen Netzwerkdienst und nutze sie aus :).

  • Holen Sie sich einen Administrator, um das Problem zu beheben.


18
2017-12-15 14:32



"Angenommen, Sie haben keinen physischen Zugriff auf den Computer und dies ist das einzige Benutzerkonto, das die Möglichkeit hat, sich anzumelden." - Dennis Williamson
Ich gehe diesen Weg hinunter. Ich werde die Lösung posten, nachdem ich sie gefunden habe. Glücklicherweise habe ich ein paar Angriffsmöglichkeiten. - Tom Ritter
benutze Filezilla zu SFTP in meinen Server und es hat mich behoben. Danke soooo, du hast mich gerettet. Ich hatte einen "Ausgang 1" Zustand in meinem .bash_profile durch Zufall und es hat mich abgespritzt. - djangofan


ssh -t username@hostname /bin/sh funktioniert bei mir.


96
2017-11-12 14:22



Dies funktioniert gut - einfach und bietet eine Shell, die Sie verwenden können, um das Problem zu beheben. - MT.
Du hast gerade mein Leben gerettet. Vielen Dank. - Leo
Versuchen Sie dies mit der Secure Shell App in Google Chrome (chrome.google.com/webstore/detail/secure-shell/...) kann aber nicht herausfinden, wie / wo die Befehlszeilenargumente zu setzen sind. Irgendwelche Tipps? - Benj
Dies funktioniert bei mir nicht (obwohl es laut man-Seite sein sollte). Der lokale Host führt Ubuntu 14.04.1 und Ubuntu 12.04.5 auf dem Remote-Host aus. Ich kann nicht rsync, weil meine Login - Shell tcsh und auf dem Remote - Host ist es Müll (tcsh: Keine solche Datei oder Verzeichnis tcsh: Versuchen, von "/ u / levy" - was mir gesagt wird, weil die Verzeichnis ist NSF mounted). Ich dachte, ich würde das Problem lösen, indem ich die Login-Shell umgehe, aber das funktioniert nicht. - Silvio Levy
Wenn Ihre Standard-Shell csh / tcsh ist, wird es immer Quelle deine .cshrc/.tcshrc auch für nicht interaktive Shells. - Brian Vandenberg


Ich hatte das gleiche Problem und konnte es irgendwie lösen. Ich benutzte ssh, um auf das System zuzugreifen, und drückte und hielt Strg + c, sobald ich mich am System anmeldete. Dann wurde ~ / .bashrc nicht gelesen und ich konnte es ändern.


27
2018-02-18 22:12



Ich war skeptisch, aber das funktioniert tatsächlich ... - rmobis
Das ist Genie! - user1747134
Wirklich funktioniert ... danke! Die anderen Methoden haben nie für mich funktioniert. - Zzzach...
auf Mac mit nur .bash_profile, hat das für mich funktioniert :) - AnneTheAgile
OMG, ich dachte, ich hätte das ganze Internet durchsucht, dann habe ich beschlossen, das zu versuchen, und das ist der einzige Weg, der für mich funktioniert! Vielen Dank! - Jiahao


Ich habe einen veröffentlichten CVE verwendet, um einen Befehl als Root über eine Webschnittstelle in einer Netzwerküberwachungssoftware auszuführen, die ich installiert hatte. rm /RAID/home/tom/.bashrc 

Dann könnte ich mich anmelden und svn die Änderungen, die ich gemacht habe, wiederherstellen.


20
2017-12-19 17:54



Das ist sowohl großartig als auch fehlerverzeihend zugleich. - MikeyB
@ TomRitter: Bitte geben Sie diese ᴄᴠᴇ Referenz. - user2284570
Es war in einer ooooolen Version von Kakteen, also wenn du keine 8 Jahre alte Software hast, denke ich nicht, dass es dir helfen wird. Und wenn Sie 8-jährige Software laufen, kann ich Ihnen nicht helfen. ;) - Tom Ritter


Sie müssen a) beginnen bash ohne sourceoder beides ~/.bashrc oder ~/.bash_profile und b) da eine solche Shell keine vollständige Login-Shell wäre / keine tty befestigt, Kraft ssh anhängen tty:

ssh -t user@host bash --norc --noprofile

11
2018-02-17 12:51



Das funktioniert, aber beachten Sie, dass Sie nicht Ihre übliche Aufforderung haben, nur einen leeren Bildschirm. versuche es mit einem ls um sich davon zu überzeugen, dass du da bist :). Beachten Sie auch, dass dies mit a erfolgt dumb Begriff, so für mich Nano funktioniert nicht - Ciprian Tomoiagă


Du hast kein Glück mehr.

Alle ssh-Befehle führen Ihre Login-Shell aus. ssh $COMMAND läuft $SHELL -c $COMMAND, scp läuft $SHELL -c /path/to/sftp-server, einfach ssh Läuft einfach deine Shell.


6
2017-12-15 13:29



Dies gilt auch für sftp - selbst SSH-Subsysteme werden scheinbar aus einer Shell heraus ausgeführt. - lxgr
Meiner Erfahrung nach sind Sie korrekt, obwohl die ssh-man-Seite sagt: "Wenn ein Befehl angegeben ist, wird er auf dem Remote-Host anstelle einer Login-Shell ausgeführt." Das Poster konnte das Problem mit der bestbewerteten Antwort (ssh hostname / bin / sh) lösen. Was gibt? - Silvio Levy
@Silvio, OPs Antwort ist, dass er einen Exploit benutzt, der nicht mit SSH zu tun hat. - Tobu
Recht. Jemand meldete Erfolg mit der bestbewerteten Antwort und ich nahm hastig an, dass es das OP war. Ich wünschte, es hätte funktioniert - ich habe eine ähnliche Situation, obwohl es nur lästig ist, nicht lähmend. (Siehe meinen Kommentar unter der bestbewerteten Antwort oben.) - Silvio Levy


Keine der obigen Antworten kann die Login-Shell von ssh umgehen. Sie können eine vollständige Befehlszeile übergeben und so die Remote-Shell ausführen, um den Befehl zu verarbeiten und die Arbeitsumgebung für den Befehl festzulegen. Dafür gibt es Shells und es ist der Unix-Weg. Sie hätten alle möglichen Kompatibilitätsprobleme, wenn Sie etwas ohne Shell ausführen wollten. Ebenso sollte das Ausprobieren eines control-C dasselbe wie das Aufrufen von exit sein, was das Verhalten ist, das Sie vermeiden möchten. Wenn Bash weiterhin ein Bug ist. Warum die Leute immer wieder sagen, dass die Manpage etwas anderes sagt, muss sie zitieren, weil sie nichts dergleichen auf meiner Manpage sagt.

Zusätzlich, auf den meisten Linux-Systemen, gibt / bin / sh nichts, da dies nur ein Symlink zu bash!

Willst du testen? Fügen Sie "echo" -Anweisungen zu Ihnen .bashrc und .profile hinzu und sehen Sie, welche ausgeführt wird. Ich tat. Hier sind die Ergebnisse.

ssh user@host wird .bash_profile ausführen ssh user@host /bin/bash wird .bashrc ausführen, aber es denkt nicht interaktiv (keine Eingabeaufforderung). ssh -t user@host /bin/bash führt .bashrc zweimal aus ... einmal bei der Anmeldung, einmal für den übergebenen Befehl, also wird bei der Angabe von ANY immer die erste ausgeführt. ssh -T user@host ist das gleiche wie nicht-T oder -t überhaupt anzugeben.

Jetzt, wenn Sie bemerken, führt mein System nicht beide Dateien aus, nur das eine oder das andere. Aber das ursprüngliche Poster hat eine Zeile in .bash_profile, die .bashrc ausführt, so dass .bashrc immer ausgeführt wird, egal was passiert. Hätte die Linie nicht dorthin legen sollen! Wenn diese Linie nicht existierte, hätten Sie kein Problem gehabt.

Du musst einen anderen Weg finden oder einen Admin finden. Dafür gibt es Admins.


5
2017-07-25 06:52



Einige gute Punkte; keine ausführbare Datei, die als Befehl übergeben wird, kann helfen, wie Sie erklären, aber zu einem etwas strittigen Punkt: if /bin/sh  hat getan zuerst ausführen, es würde Hilfe, weil Bash nicht Belastung ~/.bashrc wenn aufgerufen als sh. Diese Antwort ist eine Obermenge Ihrer anderen Antwort, also löschen Sie bitte die andere Antwort. - mklement


So etwas wie:

ssh host "/bin/bash --norc"

das scheint zu funktionieren, aber beachten Sie, dass PS1 nicht eingestellt ist, so dass Sie Befehle ohne eine Eingabe eingeben werden.

Dies hat den Vorteil, dass es nicht zerstörend ist.


3
2017-12-15 12:20



Dies funktioniert nicht, es wurde zuerst versucht, sich erfolgreich anzumelden, aber es kann nicht angemeldet werden, und daher kann bash --norc nicht ausgeführt werden - Tom Ritter


ssh -t user@host "bash --norc --noprofile -c '/bin/rm .bashrc'"

2
2018-04-09 17:16



Dies funktionierte für mich in einer sehr eingeschränkten Umgebung, wenn nichts passieren würde. Ich musste den vollständigen Pfad zu .bashrc angeben. - zbeekman