Frage Ich habe es vermasselt, gehe in .bashrc raus


Ich habe "exit" in meine .bashrc Datei eingefügt. Ich habe keinen physischen Zugriff auf die Maschine, um mich mit ssh zu verbinden. Ich habe keine Root-Rechte. Jedes Mal, wenn ich mich mit dem Server verbinde, wird die Verbindung automatisch geschlossen.

Bisher habe ich es versucht:

  • Überschreiben von .bashrc mit scp und sftp. Die Verbindung schließt vor mir kann alles machen.
  • Mit ein paar verschiedenen GUI-Programmen auf ssh zugreifen (Verbindung wird geschlossen)
  • Überschreibe die Datei mit ftp. (kann ftp nicht verwenden)
  • Von meinem Heimcomputer
    • $ ssh host "bash --noprofile --norc" (Verbindung wird geschlossen)
    • $ ssh host "mv .bashrc bashrc_temp" (Verbindung wird geschlossen)
    • $ ssh host "rm .bashrc" (gleiche Sache)
    • $ ssh host -t (Verbindung wird geschlossen)

Gibt es irgendetwas, was ich tun kann, um .bashrc zu deaktivieren oder die Datei zu überschreiben, bevor .bashrc stammt?

AKTUALISIEREN

@Ring0

Ich habe deinen Vorschlag ausprobiert, aber kein Glück. Die bashrc-Datei läuft immer noch zuerst.

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

Ich denke ich werde den Admin kontaktieren.

BEARBEITEN

@shellholic

Ich kann es nicht glauben, aber dieser Ansatz hat funktioniert! Obwohl "exit" innerhalb der ersten paar Zeilen (nur aus wenigen zusammengesetzt) ​​auftritt ob Blöcke und Export Statements) in der .bashrc-Datei, habe ich es trotzdem geschafft, es innerhalb von 20 Versuchen erfolgreich zu ctrl-c zu unterbrechen (dauerte ca. 3 Minuten). Ich entfernte die störende Zeile in der .bashrc und alles funktioniert wieder.


24
2017-11-27 08:52


Ursprung


darwinawards.com Sie sollten (temporär) einen Zugriff als Benutzer haben, der Ihre .bashrc-Datei überschreiben oder Ihre Standard-Shell auf etwas anderes ändern kann. "Fragen Sie Ihren Systemadministrator", wie MS sagt.
man 8 sshd sagt es 9. Runs user's shell or command. als neunter Schritt ...: - /
scp funktioniert auch nicht mehr, weil die Shell immer noch geöffnet wird und .bashrc aufgerufen wird - Aleksandr Levchuk
Zunächst einmal ist der Grund, warum die meisten dieser Vorschläge nicht funktionieren, weil ssh einen beliebigen Befehl ausführt, indem er es als Argument an die Shell des Benutzers übergibt. Suchen Sie nach execve in session.c. Es gibt keine Möglichkeit zum Ändern / Hinzufügen / Löschen der Argumente dieses Aufrufs der Shell des Benutzers. - Mark Wagner


Antworten:


Sie können versuchen, abzubrechen (Strg + C) vor dem Ausgang Ihres .bashrc wird ausgeführt.

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

sleep 3
echo "Too late... bye"
exit 0

35
2017-11-27 19:16



+1, weil es wahrscheinlich die einzige Lösung ist, die keine Hilfe vom Systemadministrator benötigt. Es ist jedoch viel Glück erforderlich, um das richtige Timing zu haben (ssh -v host könnte ein wenig helfen). - JooMing
Eigentlich hat die Strg + C funktioniert. Auch ohne den Schlaf. Ich habe "exit" in meine bashrc gesetzt und konnte mich nach ca. 4 Versuchen mit einer schnellen Strg + C erholen. Bitte machen Sie einige bearbeiten Sie die Antwort, so dass ich die "-1" auf "+1" ändern kann. - Aleksandr Levchuk
@Aleksandr Levchuk getan - shellholic
Ich schätze die Kombination von pathetisch lächerlicher Low-Tech- und brutaler Effektivität hier sehr. - unixtippse
Ich lache wie verrückt, diese Eile, wenn es endlich klappt. Danke @JooMing, ich habe alle Methoden von hier aus probiert serverfault.com/questions/94503/ ... sogar die mit Strg + C, aber es funktionierte nur nach dem Hinzufügen der Option -v! - mxmlnkn


Ich habe es auch geschafft, meine .bashrc-Datei in einem neuen Cluster zu versauen, auf den ich einen Testzugriff erhalten habe. Da ich nicht wie ein Noob aussehen wollte, war das letzte, was ich tun wollte, um Hilfe von den Admins zu bitten, und ich konnte kein gut getimtes ^ + C zum Arbeiten bekommen.
Was jedoch funktionierte, war ein 'rm' Befehl als letztes Argument an ssh zu senden. d.h.

ssh -tv user@host rm .bashrc

Ich konnte keinen 'mv' Befehl zum arbeiten bekommen (versuchte vorher ohne -t), also denke ich, dass die Option -t es getan haben muss, aber Sie können das testen, wenn Sie wollen. Ich habe jetzt von der .bashrc ~ Datei (von vim) alles wiedererlangt, außer der fragwürdigen Zeile und alles ist in der Welt richtig! = D


11
2018-04-08 11:56



ssh -tv user@home mv .bashrc .bashrc-old hat für mich gearbeitet - Code Commander


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

su user -s /bin/sh

Sie werden natürlich Ihr Passwort benötigen.


3
2017-11-27 16:36



Sie könnten verschiedene, nicht sh basierte Shells ausprobieren: kshoder csh - Hubert Kario


Wenn ich mich an einige schlechte Erfahrungen erinnere, die ich so hatte, scheinen die ssh, scp, sftp die Initialisierungsdateien auszuführen.

Mein Vorschlag ist es, einfach FTP zu verwenden und dann die Datei defekte Datei in der FTP-Befehlszeile zu löschen oder umzubenennen, nachdem ich mich eingeloggt habe. Ich nehme an, dass Ihr System Ihnen FTP-Zugriff erlaubt. In diesem Fall sollten Sie Ihr Passwort (sicher) ändern, wenn Sie die Reparatur abgeschlossen haben.


3
2017-11-28 01:32



Filezilla hat dafür perfekt funktioniert. Wählen Sie einfach das Menü "Server" aus und wählen Sie "Erzwinge versteckte Dateien anzeigen". - Danny G


Von man ssh (zum OpenSSH_5.6p1 zumindest 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.

.. was bedeutet, dass Sie erstellen können ~/.ssh/rc mit folgendem Inhalt:

mv ~/.bashrc ~/bak.bashrc

Dann wenn du ssh in, die problematische bashrc wird aus dem weg bewegt werden, bevor deine login shell gestartet wird - du kannst dann offensichtlich das beheben bak.bashrc und verschiebe es wieder an seinen Platz


1
2018-01-02 06:16





Verbinden Sie sich über SCP oder SFTP und bearbeiten / umbenennen / löschen Sie Ihre .bashrc-Datei auf diese Weise. Edit - Oh, ich sehe, du hast gesagt, du hast es versucht. Naja.


0
2017-11-27 20:25





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.


0
2018-02-18 22:55



Genaues Duplikat der am meisten uploaded Antwort hier - pauska


Ich fand das funktionierend.

Unterbrechen Sie den Grub-Boot-Loader durch Drücken von e ... Drücken Sie erneut e, um die Grub-Ladezeilen einzugeben, drücken Sie erneut e, um die Kernel-Zeile zu bearbeiten.

Gehe zum Ende der Zeile;

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

Geben Sie ein, um zurückzukehren, b um zu booten,

es wird eine Bash-Shell öffnen, Öffne vim /root/.bashrc und editiere entsprechend. beenden und jetzt können Sie sich anmelden


0
2018-01-04 18:21





Wenn Sie Homestead Vagrant verwenden ...

Hier ist, wie ich mich aus dieser Gurke herausgeholt habe.

(Verwenden von Git Bash unter Windows 10)

cd ../Homestead/
mv ~/.ssh/known_hosts ~/.ssh/known_hosts_OLD
ssh vagrant@127.0.0.1 -p 2222 mv ./.bashrc ./.bashrc_OLD

Hinweis: Das Standardpasswort ist "vagrant"

Diese Artikel haben mir geholfen:


0
2018-05-10 22:01





Ein paar Vorschläge, die für mich funktionierten Dieser Reddit-Thread:

ssh you@the.box /bin/bash --noprofile --norc
ssh -t jacksgt@example.com vi ./.bashrc

0
2017-09-25 19:02