J'ai un serveur Debian hébergé. Lorsque je me connecte via ssh, je suis accueilli par un environnement sh. Comment le changer pour commencer dans un environnement bash?
J'ai un serveur Debian hébergé. Lorsque je me connecte via ssh, je suis accueilli par un environnement sh. Comment le changer pour commencer dans un environnement bash?
Réponses:
En tant qu'utilisateur régulier, vous pouvez modifier votre shell de connexion par défaut à l'aide de la chshcommande. Voici un exemple:
chsh -s /bin/bash
Une autre option consiste à utiliser usermod en tant que root:
usermod -s /bin/bash username
adduser, il doit le définir par défaut sur bash. La valeur par défaut est configurée dans /etc/adduser.conf. Sinon, spécifiez explicitement le shell avec useradd.
Vous modifiez /etc/passwdoù la dernière entrée est le shell par défaut. Faites-le /bin/bash.
Alternativement, vous pouvez modifier la valeur par défaut du système de /bin/shne pas être bash.
/bin/shêtre /bin/dash. Et pour ce que ça vaut, les deux autres réponses sont identiques et atteignent la même fin par des moyens différents. Peu importe.
/etc/passwdsont fortement déconseillées. Une erreur d'édition peut interrompre les connexions pour tous les utilisateurs, nécessitant un support de récupération ou un démarrage en mode utilisateur unique pour réparer. Il existe des outils tels que le usermodchangement /etc/passwd.
/etc/passwd.
/bin/bashen /bin/shest le même que l' exécution avec --posix, ce qui peut avoir des résultats indésirables.
/bin/bashcomme coque toutes ces années sur toutes les machines. Vous avez besoin d'un argument plus concret.
Le shell système par défaut /bin/shdans les versions récentes d'Ubuntu est configuré pour être /bin/dash. En exécutant simplement la commande suivante:
sudo dpkg-reconfigure dash
vous pouvez le restaurer à son ancienne valeur par défaut /bin/bash.
Avec cela, vous pouvez obtenir l'effet souhaité d'avoir bashun shell interactif sans modifier les paramètres utilisateur (non chshou usermod), et cela fonctionnera pour tous les utilisateurs dont le shell est actuellement défini sur /bin/sh.
Il n'y a qu'un petit inconvénient à cela: le temps de démarrage d'Ubuntu peut légèrement augmenter, car dashprend moins de mémoire à charger et légèrement plus rapide à exécuter (pas étonnant - il est si limité en fonctionnalités). Mais je pense qu'il sera assez difficile de mesurer cet effet, notamment pour l'environnement d'hébergement.
De plus, il est parfois ennuyeux de voir des scripts shell qui ne fonctionnent pas correctement car ils utilisent bashdes fonctionnalités avancées qui ne sont pas prises en charge par dash. L'utilisation de cette recette garantira que cela ne se produira pas.
Pour plus d'informations, consultez le wiki Ubuntu sur ce problème .
/bin/shest utilisé comme interpréteur pour les scripts shell compatibles POSIX - ce n'est pas nécessairement le meilleur shell interactif; si vous voulez bashêtre votre shell système, vous devez définir votre shell de connexion préféré en utilisant chshou des adduserappels appropriés . l'utilisation dpkg-reconfigureest un mauvais choix si userA veut zsh et userB veut bash et tous deux insistent pour avoir / bin / sh comme shell par défaut.
zsh, et userB pour bashils l'ont. Si userC est configuré sur sh, il l'aura bash, ce qui est de toute façon Ubuntu par défaut pour les nouveaux utilisateurs
dpkg-reconfigure zshdéfinir zshcomme / bin / sh, puis dpkg-reconfigure dashdéfinir dashcomme / bin / sh qui est une sorte de blocage; je dis principalement qu'il est préférable de définir le shell de connexion sur le shell que l'on veut utiliser plutôt que de passer par des cercles pour faire de / bin / sh un bon shell de connexion.
dpkg-reconfigure dashpeut faire shvaloir bash, plutôt que paralysé dash. Tous les autres obus seront toujours intacts.
Dans le cas où vous essayez d'utiliser un compte partagé (pour une raison quelconque) et que vous ne pouvez pas modifier le shell par défaut, vous pouvez exécuter
ssh -t <user@hostname> bash -l
Si vous devez conserver votre environnement à partir d'un autre shell, vous pouvez d'abord exécuter ce shell; par exemple
ssh -t <user@hostname> ksh -c bash -l
-loption?