Comment démarrer en bash lors de la connexion à mon serveur?


29

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?

linux  bash  debian  sh 

1
Pas vraiment une question de programmation. À l'avenir, vous feriez probablement mieux de poser des questions comme celle-ci sur Unix / Linux .
tylerl

Réponses:


34

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

1
usermod fonctionnait comme un charme. Existe-t-il un moyen de le définir par défaut sur bash lorsque j'ajoute un nouvel utilisateur, ou dois-je exécuter la commande à chaque fois?

Si vous utilisez 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.
jordanm

5

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.


1
Yo, quoi de neuf avec le downvote drive-by? Par exemple, Ubuntu est par défaut à /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.
Dirk Eddelbuettel

4
Les modifications manuelles de /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.
jordanm

1
Absurdité. Exécuter Linux depuis '94 ici. Jamais éclaté /etc/passwd.
Dirk Eddelbuettel

2
Heureux d'entendre que vous avez été très prudent. Tout le monde ne l'a pas fait. Une autre note sur votre mise à jour, le lancement /bin/bashen /bin/shest le même que l' exécution avec --posix, ce qui peut avoir des résultats indésirables.
jordanm

Regardez, je suis aussi développeur / mainteneur Debian depuis 1995. Nous avions l'habitude d'avoir bash par défaut, nous sommes passés à des shells plus simples pour diverses raisons. J'ai utilisé /bin/bashcomme coque toutes ces années sur toutes les machines. Vous avez besoin d'un argument plus concret.
Dirk Eddelbuettel

2

Vous devez modifier votre profil utilisateur, vous pouvez le faire directement en modifiant le /etc/passwdfichier, ou vous pouvez utiliser la usermodcommande pour le faire pour vous. La syntaxe que vous recherchez ressemble à ceci:

usermod -s /bin/bash joeuser

1

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 .


vous devez garder les cas d'utilisation à part: /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.
umläute

si userA est explicitement configuré pour 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
mvp

bien sûr, mais votre solution a suggéré quelque chose comme 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.
umläute

Je dis seulement que cela dpkg-reconfigure dashpeut faire shvaloir bash, plutôt que paralysé dash. Tous les autres obus seront toujours intacts.
mvp

1

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

Cela fonctionne plutôt bien, mais pourquoi l' -loption?
nbkhope

@nbkhope il s'assurera que le .bashrc est exécuté pour vous.
UKMonkey

0

Ni l'un chshni l' autre usermodne travaillait pour moi, mais j'ai trouvé que vous pouvez le faire via PuTTY.

Aller à Connection > SSHet régler l' Remote commandà bash.

Notez que vous ne pourrez pas utiliser exitvotre shell par défaut, cela fermera simplement la connexion.

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.