it-swarm.com.de

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

Nehmen wir also an, man hat etwas in ihre .bashrc das verhindert, dass er (oder sie) sich über ssh anmeldet (d. h. die ssh-Anmeldung wird aufgrund des Fehlers in der Datei beendet). Gibt es eine Möglichkeit, wie sich diese Person anmelden kann, ohne sie auszuführen (oder .bashrc da der eine den anderen ausführt) oder auf andere Weise die Datei löschen/umbenennen/ungültig machen?

Angenommen, Sie haben keinen physischen Zugriff auf den Computer, und dies ist das einzige Benutzerkonto, das SSH-fähig ist.

Als Referenz: .bash_profile enthält .bashrc:

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

Edit: Dinge, die ich versucht habe :

ssh [email protected] "rm ~/.bashrc"

scp nothing [email protected]:/RAID/home/tom/.bashrc

ssh [email protected]  "/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
79
Tom Ritter

Ich denke, Ihre einzigen Optionen sind:

  • ssh als anderer Benutzer und su zu Ihrem Konto;

  • verwenden Sie etwas wie ftp oder smbclient, wenn die entsprechenden Dienste auf dem Host aktiviert sind.

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

  • lassen Sie das Problem von einem Administrator beheben.

25
larsks

ssh -t [email protected] /bin/sh funktioniert bei mir.

120
user60069

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

37
miyashin

Ich habe ein veröffentlichtes CVE verwendet, um einen Befehl als Root über eine Webschnittstelle in einer von mir installierten Netzwerküberwachungssoftware auszuführen. rm /RAID/home/tom/.bashrc

Dann konnte ich mich anmelden und die vorgenommenen Änderungen rückgängig machen.

21
Tom Ritter

Sie müssen a) beginnen bash ohne source 'entweder ~/.bashrc oder ~/.bash_profile und b) da eine solche Shell keine vollständige Login-Shell wäre/keine tty angehängt haben, erzwinge ssh, um eine tty anzuhängen ::

ssh -t [email protected] bash --norc --noprofile
17

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, plain ssh führt nur Ihre Shell aus.

7
Tobu

Keine der oben genannten Antworten kann die Login-Shell von ssh umgehen. Sie können eine vollständige Befehlszeile übergeben, sodass die Remote-Shell ausgeführt wird, um den Befehl zu verarbeiten und die Arbeitsumgebung für den Befehl festzulegen. Dafür sind Shells da und es ist der Unix-Weg. Sie hätten alle möglichen Kompatibilitätsprobleme, wenn Sie versuchen würden, etwas ohne Shell auszuführen. Ebenso sollte der Versuch eines Control-C dasselbe tun wie der Aufruf von exit. Dies ist das Verhalten, das Sie vermeiden möchten. Wenn Bash weitergeht, ist es ein Fehler. Warum die Leute immer wieder sagen, dass die Manpage etwas anderes sagt, müssen es zitieren, weil es nichts dergleichen in meiner Manpage sagt.

Außerdem macht die Angabe von/bin/sh auf den meisten Linux-Systemen NICHTS, da dies nur ein Symlink zu bash ist!

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

ssh [email protected] Führt .bash_profile aus ssh [email protected] /bin/bash Führt .bashrc aus, denkt jedoch, dass es nicht interaktiv ist (keine Eingabeaufforderung). ssh -t [email protected] /bin/bash Führt .bashrc zweimal aus ... einmal beim Anmelden, einmal für den übergebenen Befehl. Wenn Sie also eine beliebige Shell angeben, wird immer die erste ausgeführt. ssh -T [email protected] Entspricht der Angabe von -T oder -t.

Wenn Sie jetzt bemerken, führt MEIN System nicht beide Dateien aus, sondern nur die eine oder andere. Das Originalposter enthält jedoch eine Zeile in .bash_profile, in der .bashrc ausgeführt wird, sodass .bashrc immer ausgeführt wird, egal was passiert. Hätte diese Zeile nicht dort setzen sollen! Wenn diese Leitung nicht existiert hätte, hätten Sie kein Problem gehabt.

Sie müssen einen anderen Weg finden oder einen Administrator finden. Dafür sind Admins da.

6
Evan Langlois

Etwas wie:

ssh Host "/bin/bash --norc"

das scheint zu funktionieren, aber beachten Sie, dass PS1 nicht eingestellt ist, sodass Sie Befehle ohne Eingabeaufforderung eingeben.

Dies hat den Vorteil, zerstörungsfrei zu sein.

ssh -t [email protected] "bash --norc --noprofile -c '/bin/rm .bashrc'"
2
wytten

versuchen

echo ^C | ssh <hostname> ' rm .bashrc'

^ C gibt es control-v dann c

2
user161180

Das Drücken von Strg-C funktioniert so lange, wie Sie Strg-C aktivieren können, bevor die .bashrc-Datei beendet wird. Leider kann dies schwierig sein, wenn exit früh in der .bashrc ist.

Sie können ein Strg-C so schnell wie möglich eingeben, indem Sie es direkt an ssh weiterleiten:

{ echo ^C; cat /dev/tty; } | ssh -tt [email protected]

Beachten Sie, dass ^C wird wie Strg-V gefolgt von Strg-C eingegeben.

Dies leitet eine einzelne Strg-C-Taste weiter, gefolgt von einer Eingabe vom steuernden Terminal, während -tt erzwingt die Zuweisung eines Pseudo-Terminals. Alles in allem erhalten Sie eine (etwas fehlerhafte) Shell auf dem Remote-Computer, während Sie so viel .bashrc wie möglich umgehen.

1
Chris

UH = 'user @ Host'; ssh $ UH 'mv ~/.bashrc ~/letmein'; ssh $ UH

Bitte nicht schneiden und ausführen, user und Host ändern, dann letmein bearbeiten und als .bashrc Speichern.

0
SpiesInOrbit

Sie können versuchen, .bash_profile Mit einer leeren Datei mit dem Befehl scp zu überschreiben. Nach dem, was ich gegoogelt habe, verwendet scp ein nicht interaktives Login, das nicht .bash_profile Lautet.

0

Sie können die bashrc-Datei auch einfach löschen:

ssh <hostname> rm ~/.bashrc
0
sybreon

Wenn Ihr System normal eingerichtet ist, wird .bash_profile nicht für eine nicht interaktive Shell ausgeführt (z. B. zum Ausführen eines Befehls).

Versuchen Sie, das Problem aus dem Weg zu räumen, da Sie angeben, dass sich das Problem in der Datei .bash_profile befindet:

ssh [email protected] "mv ~/.bash_profile ~/.bash_profile_broken"
0
Lockie

Ein großes Lob an user60069, es hat bei mir funktioniert, aber ich verwende die Shell-spezifische Startdatei .bashrc, sodass die Anmeldung mit/bin/sh für mich funktioniert hat.

Wenn Sie sich jedoch in der Situation befinden, dass Sie kein Glück haben, biete ich diese Lösung an, die auf den Lösungen von user60069 und Dennis W basiert:

ssh -t [email protected]  /bin/bash --noprofile  --norc

Dennis W bot die Option --norc an, von der jemand sagte, dass sie für sie nicht funktioniert.

Führen Sie "man bash" oder "man (Ihre Shell)" aus, um Optionen zum Deaktivieren der Startdateien zu erhalten. Sie müssen nur für die Zeit, die zur Behebung des Problems benötigt wird, eine abscheuliche Shell verwenden.

0
Jim

Eine andere Möglichkeit, sich beim Server anzumelden, ist ohne Profil. Den folgenden Befehl finden Sie
ssh -t [email protected] bash --noprofile

Für AWS mit PEM-Datei und keinem anderen Benutzer
ssh -ti "YOUR-PEM-FILE-NAME.pem" [email protected] bash --noprofile

Hoffe das hilft!

0
Krutarth Shah