122 votes

Se connecter sans exécuter bash_profile ou bashrc

Alors disons que quelqu'un a fait une faute de frappe dans son .bashrc qui l'empêche de se connecter via ssh (c'est-à-dire que la connexion ssh se termine à cause de l'erreur dans le fichier). Existe-t-il un moyen pour que cette personne puisse se connecter sans l'exécuter (ou .bashrc puisque l'un fait fonctionner l'autre), ou bien supprimer/renommer/invalider le fichier ?

Supposons que vous n'ayez pas d'accès physique à la machine, et que ce soit le seul compte d'utilisateur ayant la possibilité de se connecter par ssh.

Pour référence : .bash_profile comprend .bashrc :

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

Edit : Choses que j'ai essayé :

ssh user@host "rm ~/.bashrc"

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

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

Tous donnent l'erreur :

/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

5 votes

Votre commande scp ne fonctionnera pas car scp lira également le fichier .bashrc lors de la connexion. Pour éviter ce problème à l'avenir, vous pouvez ajouter quelque chose comme [ -z "$PS1" ] && return au début de ./bashrc. De cette façon, scp arrêtera d'analyser .bashrc après la première ligne, et vous pourrez l'écraser en cas d'urgence.

184voto

Frantumn Points 1378

ssh -t username@hostname /bin/sh fonctionne pour moi.

0 votes

Cela fonctionne bien - simple et fournit un Shell que vous pouvez utiliser pour résoudre le problème.

1 votes

J'essaie de le faire avec l'application Secure Shell dans Google Chrome ( chrome.google.fr/webstore/detail/secure-Shell/ ) mais je n'arrive pas à trouver comment/où placer les arguments de la ligne de commande. Des conseils ?

2 votes

Cela ne fonctionne pas pour moi (bien que cela devrait selon la page de manuel). L'hôte local exécute ubuntu 14.04.1 et c'est ubuntu 12.04.5 sur l'hôte distant. Je suis incapable de rsync parce que mon login Shell est tcsh et sur l'hôte distant, il imprime des déchets (tcsh : Aucun fichier ou répertoire de ce type tcsh : Trying to start from "/u/levy" -- dont on me dit que c'est parce que le répertoire est monté par NSF). Je pensais résoudre le problème en contournant le login Shell mais cela ne fonctionne pas.

72voto

miyashin Points 581

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 maintenu la touche Ctrl+c enfoncée dès que je me suis connecté au système. Ensuite, ~/.bashrc n'a pas été lu, et j'ai pu le modifier.

22 votes

J'étais sceptique, mais ça marche vraiment...

5 votes

C'est génial !

1 votes

Ça marche vraiment... merci ! Les autres méthodes n'ont jamais fonctionné pour moi.

44voto

osm Points 1964

Vous devez a) commencer bash sans source soit ~/.bashrc o ~/.bash_profile et b) puisqu'une telle Shell ne serait pas une Shell de connexion complète / n'a pas de tty attaché, force ssh pour joindre un tty :

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

5 votes

Cela fonctionne, mais notez que vous n'aurez pas votre invite habituelle, juste un écran vide. essayez de faire un ls pour vous convaincre que vous êtes dans le coup :). Notez également que ceci utilisera un dumb terme, donc pour moi nano ne fonctionne pas

1 votes

@CiprianTomoiaga Eh bien, c'est un peu l'idée, puisque la prémisse de la question est que .bashrc est foutu :) Cela devrait vous permettre d'aller assez loin pour pouvoir nettoyer les dégâts, puis vous pourrez essayer de vous connecter à nouveau à un Shell normal.

0 votes

En effet ! J'étais juste un peu confus au début car il n'y avait même pas un $ pour indiquer l'invite :).

33voto

Eric Noob Points 531

Je pense que vos seules options sont :

  • Connectez-vous en tant qu'autre utilisateur et accédez à votre compte ;

  • utiliser quelque chose comme ftp ou smbclient, si les services correspondants sont activés sur l'hôte ;

  • trouver une vulnérabilité ouverte dans un service réseau ouvert et l'exploiter :).

  • demander à un administrateur de régler le problème.

8 votes

"Supposons que vous n'ayez pas d'accès physique à la machine, et que ce soit le seul compte utilisateur ayant la possibilité de se connecter par ssh."

0 votes

Je suis en train de suivre cette voie. Je posterai la solution dès que je l'aurai trouvée. Par chance, j'ai plusieurs voies d'attaque.

7 votes

J'ai utilisé Filezilla pour SFTP sur mon serveur et ça m'a arrangé. Merci beaucoup, vous m'avez sauvé. J'avais une condition "exit 1" dans mon fichier .bash_profile par accident et ça m'a planté.

24voto

simmosn Points 314

J'ai utilisé un CVE publié pour exécuter une commande en tant que root via une interface web dans un logiciel de surveillance de réseau que j'avais installé. rm /RAID/home/tom/.bashrc

Ensuite, je pouvais me connecter et svn revert les changements que j'ai fait.

13 votes

C'est à la fois génial et flippant en même temps.

1 votes

@TomRitter : Veuillez fournir cette référence.

2 votes

C'était dans une ancienne version de Cacti, donc à moins que vous n'utilisiez un logiciel vieux de 8 ans, je ne pense pas que cela puisse vous aider. Et si vous utilisez un logiciel vieux de 8 ans, je ne peux pas vous aider ;)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X