J'ai foiré, sortir en .bashrc


27

J'ai mis "exit" dans mon fichier .bashrc. Je n'ai pas d'accès physique à la machine, donc pour me connecter, j'utilise ssh. Je n'ai pas de privilèges root. Chaque fois que je me connecte au serveur, la connexion se ferme automatiquement.

Jusqu'à présent, j'ai essayé:

  • Écraser .bashrc avec scp et sftp. La connexion se ferme avant que je puisse faire quoi que ce soit.
  • Utilisation de différents programmes GUI pour accéder à ssh (la connexion se ferme)
  • Écraser le fichier avec ftp. (ne peut pas utiliser ftp)
  • Depuis mon ordinateur personnel
    • $ ssh host "bash --noprofile --norc" (la connexion se ferme)
    • $ ssh host "mv .bashrc bashrc_temp" (la connexion se ferme)
    • $ ssh host "rm .bashrc" (même chose)
    • $ ssh host -t (la connexion se ferme)

Puis-je faire quelque chose pour désactiver .bashrc ou peut-être écraser le fichier avant que .bashrc soit fourni?

MISE À JOUR

@ ring0

J'ai essayé votre suggestion, mais pas de chance. Le fichier bashrc s'exécute toujours en premier.

Une autre chose que j'ai essayée était de me connecter avec un autre compte et de modifier sudo le .bashrc, mais je n'ai pas les privilèges sudo sur ce compte.

Je suppose que je vais contacter l'administrateur.

MODIFIER

@shellholic

Je ne peux pas le croire, mais cette approche a fonctionné! Même si "exit" se produit dans les premières lignes (composées uniquement de quelques if si blocs et instructions d' exportation ) dans le fichier .bashrc, j'ai quand même réussi à l'interrompre avec succès en Ctrl-c dans les vingt essais (a pris environ 3 minutes). J'ai supprimé la ligne incriminée dans le .bashrc et tout fonctionne à nouveau.


2
darwinawards.com vous devriez avoir (temporairement) un accès en tant qu'utilisateur qui peut remplacer votre fichier .bashrc, ou changer votre shell par défaut pour autre chose. "Demandez à votre administrateur système" comme le dit MS.

2
man 8 sshddit que c'est 9. Runs user's shell or command.la neuvième étape ...: - /

1
scp cessera également de fonctionner car le shell est toujours ouvert et .bashrc est appelé
Aleksandr Levchuk

Pour info, la plupart de ces suggestions ne fonctionnent pas parce que ssh exécute une commande en la passant comme argument au shell de l'utilisateur. Recherchez execve dans session.c. Il n'y a aucun moyen de modifier / ajouter / supprimer les arguments de cette invocation du shell de l'utilisateur.
Mark Wagner

Réponses:


37

vous pouvez essayer d'interrompre (ctrl + C) avant que la partie de sortie de votre ne .bashrcsoit exécutée.

J'ai essayé en ajoutant ce qui suit en haut du bashrc d'un testeur, cela fonctionne, c'est juste une question de timing. Très facile dans mon cas:

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

8
+1, car c'est probablement la seule solution qui ne nécessite pas l'aide de l'administrateur système. Cependant, beaucoup de chance est nécessaire pour avoir un timing correct (l'hôte ssh -v pourrait aider un peu).
JooMing

En fait, ctrl + C a fonctionné. Même sans dormir. J'ai placé "exit" dans mon bashrc et j'ai pu récupérer avec un ctrl + C rapide après environ 4 essais. Veuillez modifier la réponse pour que je puisse changer le "-1" en "+1".
Aleksandr Levchuk

@Aleksandr Levchuk done
shellholic

4
J'apprécie beaucoup la combinaison d'une faible technologie pathétiquement ridicule et d'une efficacité brutale ici.
unixtippse

1
Je ris comme un fou, cette précipitation quand ça marche enfin. Merci @JooMing, j'ai essayé toutes les méthodes d'ici serverfault.com/questions/94503/… même celle en appuyant sur Ctrl + C, mais cela n'a fonctionné qu'après avoir ajouté l'option -v!
mxmlnkn

12

J'ai également réussi à gâcher mon fichier .bashrc sur un nouveau cluster auquel j'ai eu accès à l'essai. Ne voulant pas ressembler à un noob, la dernière chose que je voulais faire était de demander l'aide des administrateurs, et je n'arrivais pas à faire fonctionner un ^ + C au bon moment.
Ce qui a fonctionné cependant, a été d'envoyer une commande 'rm' comme argument final à ssh. c'est à dire

ssh -tv user@host rm .bashrc

Je n'ai pas pu faire fonctionner une commande 'mv' (essayée avant sans -t), donc je pense que l'option -t doit l'avoir fait, mais vous pouvez tester cela si vous le souhaitez. J'ai maintenant récupéré du fichier .bashrc ~ (créé par vim) tout sauf la ligne douteuse en question et tout va bien dans le monde! = D


2
ssh -tv user@home mv .bashrc .bashrc-oldtravaillé pour moi
Code Commander

3

Si vous pouvez vous connecter en tant qu'utilisateur différent, essayez ceci:

su user -s /bin/sh

Vous aurez bien sûr besoin de votre mot de passe.


1
vous pouvez essayer un shell différent, pas basé sur sh: kshoucsh
Hubert Kario

3

Si je me souviens de quelques mauvaises expériences que j'ai eues comme ça, les ssh, scp, sftp semblent exécuter les fichiers d'initialisation.

Ma suggestion est d'utiliser un FTP simple, puis de supprimer ou renommer un fichier incorrect sur la ligne de commande FTP après la connexion. Je suppose que votre système vous autorisera à accéder au FTP. Dans un tel cas, assurez-vous de changer votre mot de passe (en toute sécurité) lorsque vous avez terminé la réparation.


Filezilla a parfaitement fonctionné pour cela. Il suffit de dérouler le menu "Serveur" et de sélectionner le paramètre "Forcer l'affichage des fichiers cachés".
Danny G

1

De man ssh(pour OpenSSH_5.6p1au moins, je ne sais pas quand il a été ajouté),

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

.. ce qui signifie que vous pouvez créer ~/.ssh/rccontenant les éléments suivants:

mv ~/.bashrc ~/bak.bashrc

Ensuite, lorsque vous sshentrerez, le bashrc problématique sera déplacé avant le démarrage de votre shell de connexion - vous pouvez alors évidemment réparer le bak.bashrcet le remettre en place


0

Connectez-vous via SCP ou SFTP et modifiez / renommez / supprimez votre fichier .bashrc de cette façon. Edit - D'oh, je vois que tu as dit que tu avais essayé. Tant pis.


0

J'ai eu le même problème et j'ai réussi à le résoudre. J'ai utilisé ssh pour accéder au système et j'ai appuyé et maintenu Ctrl + c dès que je me suis connecté au système. Ensuite, ~ / .bashrc n'a pas été lu et j'ai pu le modifier.


1
Copie exacte de la réponse la plus votée ici
pauska

0

J'ai trouvé que ça fonctionnait.

Interrompez le chargeur de démarrage de grub en appuyant sur e ... appuyez à nouveau sur e pour entrer dans les lignes de chargement de grub, appuyez à nouveau sur e pour modifier la ligne du noyau,

aller en fin de ligne;

ajoutez init = / bin / bash à la fin de la ligne,

entrer pour revenir, b pour démarrer,

il ouvrira un shell bash, ouvrira vim /root/.bashrc et modifiera en conséquence. quitter et maintenant vous pourrez vous connecter



0

Quelques suggestions qui ont fonctionné pour moi à partir de ce fil Reddit :

ssh you@the.box /bin/bash --noprofile --norc
ssh -t jacksgt@example.com vi ./.bashrc
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.