70 votes

J'ai détruit mon fichier .bash_profile à distance, je ne peux pas me connecter à nouveau.

J'utilise un système GNU/Linux à distance, via SSH.

J'ai ajouté par erreur quelque chose dans mon $HOME/.bash_profile scriot qui provoque une erreur. (Pour être précis : j'ai ajouté un exec foo au lieu de . foo appliqué à un autre bash script sans autorisation d'exécution, ce qui entraîne une erreur).

Maintenant, je n'arrive pas à me connecter en SSH, SCP ou SFTP sur ma machine : bash, mon login Shell, essaie d'exécuter la commande suivante exec foo obtient l'erreur et me jette dehors ! Je n'ai pas d'autre compte auquel je peux accéder à distance.

Y a-t-il quelque chose que je puisse faire pour rétablir l'accès au système ?

Détails supplémentaires :

  • La plupart des ports autres que celui de SSH ne sont pas disponibles car la machine est derrière un pare-feu.
  • C'est un système Devuan 3 ASCII (~= Debian 10 Beowulf).

130voto

styrofoam fly Points 1816

Comme décrit aquí vous pouvez utiliser

ssh -t user@host bash --noprofile

en fait, comme le suggère @JoL, vous n'avez même pas besoin de l'option --noprofile , puisque lorsque ssh exécute bash comme une autre commande, il n'est pas considéré comme un Shell de connexion. Exécution de ssh -t user@host bash ne lira que les fichiers RC ; et l'exécution de ssh -t user@host bash --norc ne liront même pas ceux-là.

48voto

kenorb Points 22006

Essayez de SSH et exécutez sh au lieu de bash par exemple

ssh user@host sh

Puis renommez ( mv ) ou modifier le fichier cassé ( ex/vi ).

21voto

chepner Points 6381

Exécuter ssh -t host vi .bash_profile (ou l'éditeur de votre choix à la place de vi ) et réparer votre .bash_profile .

(Le -t peut ne pas être nécessaire, selon l'éditeur que vous choisissez).

Si vous savez exactement ce qui doit être réparé, vous pourrez peut-être le faire de manière non interactive. Par exemple, quelque chose comme

printf 's/exec foo/. foo/\nwq\n' ssh host ed .bash_profile

1voto

Meidan Alon Points 1067

Si seulement ~/.bash_profile est incorrecte, consultez les autres réponses pour la corriger. Le reste de cette réponse développe la correction de tous les (autres) scripts de connexion.

Si vous êtes assez malchanceux pour avoir echo Bad luck; exit 42 au début de vos deux ~/.bashrc y ~/.bash_profile et vous avez /bin/bash comme login Shell, et ssh root@host ne fonctionne pas non plus, il est peu probable que vous puissiez le réparer à distance. C'est parce que sshd insistera pour exécuter votre login Shell, et le premier /bin/bash lira soit ~/.bashrc o ~/.bash_profile et spécifiant bash --norc --noprofile est trop tard, car le /bin/bash exécuté par sshd n'a pas ces drapeaux, peu importe ce que vous spécifiez dans la commande ssh en ligne de commande.

Si tu n'as fait qu'une erreur ~/.bashrc puis exécutez ceci pour le réparer :

echo mv -f .bashrc .bashrc.mess | ssh host

Si tu n'as fait qu'une erreur ~/.bash_profile または ~/.profile または ~/.bash_login puis exécutez ceci pour le réparer :

ssh host 'mv -f .bash_profile .bash_profile.mess; mv -f .profile .profile.mess; mv -f .bash_login .bash_login.mess'

Après la réparation, vous pouvez faire ssh host comme d'habitude, et nettoyez les fichiers de connexion script dans votre éditeur préféré ou en utilisant scp, sftp ou rsync pour transférer les fichiers et les éditer localement.

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