Ich habe es vermasselt, gehe in .bashrc

27

Ich habe "exit" in meine .bashrc-Datei eingefügt. Ich habe keinen physischen Zugriff auf die Maschine, daher verwende ich ssh, um mich mit ihr zu verbinden. Ich habe keine Root-Rechte. Jedes Mal, wenn ich eine Verbindung zum Server herstelle, wird die Verbindung automatisch getrennt.

Bisher habe ich versucht:

  • Überschreiben von .bashrc mit scp und sftp. Die Verbindung wird getrennt, bevor ich etwas tun kann.
  • Verwenden einiger verschiedener GUI-Programme, um auf ssh zuzugreifen (Verbindung wird geschlossen)
  • Datei mit ftp überschreiben. (kann ftp nicht benutzen)
  • Von meinem Heimcomputer
    • $ ssh-Host "bash --noprofile --norc" (Verbindung wird geschlossen)
    • $ ssh-Host "mv .bashrc bashrc_temp" (Verbindung wird geschlossen)
    • $ ssh-Host "rm .bashrc" (dasselbe)
    • $ ssh host -t (Verbindung wird geschlossen)

Kann ich irgendetwas tun, um .bashrc zu deaktivieren oder die Datei zu überschreiben, bevor .bashrc bezogen wird?

AKTUALISIEREN

@ ring0

Ich habe deinen Vorschlag ausprobiert, aber kein Glück. Die bashrc-Datei wird weiterhin zuerst ausgeführt.

Eine andere Sache, die ich versuchte, war, mich mit einem anderen Konto anzumelden und die .bashrc-Datei zu bearbeiten, aber ich habe keine sudo-Berechtigungen für dieses Konto.

Ich nehme an, ich werde den Administrator kontaktieren.

BEARBEITEN

@Shellholic

Ich kann es nicht glauben, aber dieser Ansatz hat funktioniert! Obwohl "exit" innerhalb der ersten paar Zeilen (bestehend aus nur wenigen if- Blöcken und export- Anweisungen) in der .bashrc-Datei auftritt, habe ich es trotzdem geschafft, Strg-c innerhalb von 20 Versuchen erfolgreich zu unterbrechen (es dauerte ungefähr 3 Minuten). Ich habe die fehlerhafte Zeile in der .bashrc entfernt und alles funktioniert wieder.

camel_space
quelle
2
darwinawards.com sollten Sie einen (vorübergehenden) Zugriff als Benutzer haben, der Ihre .bashrc-Datei überschreiben oder Ihre Standard-Shell in etwas anderes ändern kann. "Fragen Sie Ihren Systemadministrator", wie MS sagt.
2
man 8 sshdsagt, dass es 9. Runs user's shell or command.als neunter Schritt ...: - /
1
scp wird auch aufhören zu arbeiten, weil die Shell noch geöffnet wird und .bashrc aufgerufen wird
Aleksandr Levchuk
Der Grund, warum die meisten dieser Vorschläge nicht funktionieren, ist, dass ssh einen Befehl ausführt, indem es ihn als Argument an die Shell des Benutzers übergibt. Suchen Sie in session.c nach execve. Es gibt keine Möglichkeit, die Argumente dieses Aufrufs der Shell des Benutzers zu ändern, hinzuzufügen oder zu löschen.
Mark Wagner

Antworten:

37

Sie können versuchen, den Vorgang abzubrechen (Strg + C), bevor der Exit-Teil Ihres Programms .bashrcausgeführt wird.

Ich habe versucht, indem ich das Folgende oben in den bashrc eines Testbenutzers hinzufüge, es funktioniert, es ist nur eine Frage des Timings. Sehr einfach in meinem Fall:

sleep 3
echo "Too late... bye"
exit 0
Shellholic
quelle
8
+1, weil es wahrscheinlich die einzige Lösung ist, die keine Hilfe vom Systemadministrator benötigt. Es ist jedoch eine Menge Glück erforderlich, um das richtige Timing zu haben (ssh -v Host könnte ein bisschen helfen).
JooMing
Eigentlich hat die Tastenkombination Strg + C funktioniert. Auch ohne den Schlaf. Ich habe "exit" in meinen bashrc gelegt und konnte mich nach ca. 4 Versuchen mit einem schnellen Strg + C erholen. Bitte nehmen Sie einige Änderungen an der Antwort vor, damit ich "-1" in "+1" ändern kann.
Aleksandr Levchuk
@ Aleksandr Levchuk fertig
Shellholic
4
Ich schätze die Kombination von lächerlicher Low-Tech und brutaler Effektivität hier sehr.
Unixtippse
1
Ich lache wie verrückt, diese Eile, wenn es endlich funktioniert. Danke @JooMing, ich habe alle Methoden von hier aus ausprobiert, auch die mit Strg + C, aber erst nach dem Hinzufügen der Option -v!
mxmlnkn
12

Ich habe es geschafft, meine .bashrc-Datei auf einem neuen Cluster durcheinander zu bringen, auf den ich Testzugriff erhalten habe. Ich wollte nicht wie ein Noob wirken, aber ich wollte als letztes die Administratoren um Hilfe bitten, und ich konnte kein gut abgestimmtes ^ + C zum Laufen bringen.
Was jedoch funktionierte, war, ein 'rm'-Kommando als letztes Argument an ssh zu senden. dh

ssh -tv user@host rm .bashrc

Ich konnte einen 'mv'-Befehl nicht zum Laufen bringen (zuvor ohne -t ausprobiert), daher denke ich, dass die -t-Option dies getan haben muss, aber Sie können das testen, wenn Sie möchten. Ich habe jetzt von der .bashrc ~ -Datei (erstellt von vim) alles außer der fraglichen zweifelhaften Zeile wiederhergestellt und alles stimmt auf der Welt! = D

Alex Leach
quelle
2
ssh -tv user@home mv .bashrc .bashrc-oldarbeitete für mich
Code Commander
3

Wenn Sie sich als ein anderer Benutzer anmelden können, versuchen Sie Folgendes:

su user -s /bin/sh

Sie benötigen natürlich Ihr Passwort.

Cakemox
quelle
1
Sie könnten eine andere, nicht auf sh basierende Shell ausprobieren: kshodercsh
Hubert Kario
3

Wenn ich mich an einige schlechte Erfahrungen erinnere, die ich auf diese Weise gemacht habe, scheinen ssh, scp und sftp die Initialisierungsdateien auszuführen.

Mein Vorschlag ist, einfaches FTP zu verwenden und dann die fehlerhafte Datei in der FTP-Befehlszeile nach dem Anmelden zu löschen oder umzubenennen. Ich gehe davon aus, dass Ihr System Ihnen den FTP-Zugriff ermöglicht. In einem solchen Fall müssen Sie Ihr Passwort (sicher) ändern, wenn Sie die Reparatur abgeschlossen haben.

mdpc
quelle
Filezilla hat dafür perfekt funktioniert. Sie müssen nur das Menü "Server" ausklappen und die Einstellung "Versteckte Dateien erzwingen" auswählen.
Danny G
1

Von man ssh( OpenSSH_5.6p1zumindest nicht sicher, wann es hinzugefügt wurde),

~/.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.

..das bedeutet, dass Sie ~/.ssh/rcFolgendes erstellen können :

mv ~/.bashrc ~/bak.bashrc

Wenn Sie dann ssheintreten, wird der problematische bashrc aus dem Weg geräumt, bevor Ihre Anmeldeshell gestartet wird. Sie können dann offensichtlich den Fehler beheben bak.bashrcund ihn wieder an seinen Platz verschieben

dbr
quelle
0

Stellen Sie eine Verbindung über SCP oder SFTP her und bearbeiten / benennen / löschen Sie Ihre .bashrc-Datei auf diese Weise. Bearbeiten - Oh, wie ich sehe, hast du das versucht? Naja.

mfinni
quelle
0

Ich hatte das gleiche Problem und konnte es irgendwie lösen. Ich habe ssh verwendet, um auf das System zuzugreifen, und habe Strg + C gedrückt und gehalten, sobald ich mich beim System angemeldet habe. Dann wurde ~ / .bashrc nicht gelesen, und ich konnte es ändern.

Miyashin
quelle
1
Genaues Duplikat der am höchsten bewerteten Antwort hier
pauska
0

Ich fand das funktioniert.

Unterbrechen Sie den Grub-Bootloader, indem Sie erneut e ... drücken, um Grub-Ladezeilen einzugeben. Drücken Sie erneut e, um die Kernel-Zeile zu bearbeiten.

gehe zum Ende der Zeile;

füge init = / bin / bash am Ende der Zeile hinzu,

Enter, um zurückzukehren, b, um zu booten,

Es öffnet eine Bash-Shell, öffnet vim /root/.bashrc und bearbeitet sie entsprechend. Beenden Sie und Sie können sich jetzt anmelden

Haseeb
quelle