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 chsh
commande. 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/passwd
où 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/sh
ne 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/passwd
sont 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 usermod
changement /etc/passwd
.
/etc/passwd
.
/bin/bash
en /bin/sh
est le même que l' exécution avec --posix
, ce qui peut avoir des résultats indésirables.
/bin/bash
comme 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/sh
dans 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 bash
un shell interactif sans modifier les paramètres utilisateur (non chsh
ou 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 dash
prend 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 bash
des 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/sh
est 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 chsh
ou des adduser
appels appropriés . l'utilisation dpkg-reconfigure
est 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 bash
ils 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 zsh
définir zsh
comme / bin / sh, puis dpkg-reconfigure dash
définir dash
comme / 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 dash
peut faire sh
valoir 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
-l
option?