Como inicio no bash quando ssh'ing no meu servidor?

29

Eu tenho um servidor Debian hospedado. Quando faço login via ssh, sou recebido com um ambiente sh. Como faço para alterá-lo para começar em um ambiente de bash?


fonte
1
Não é realmente uma questão de programação. No futuro, é melhor você fazer perguntas como essa no Unix / Linux .
tylerl

Respostas:

33

Como usuário comum, você pode alterar seu shell de login padrão usando o chshcomando Aqui está um exemplo:

chsh -s /bin/bash

Outra opção é usar o usermod como root:

usermod -s /bin/bash username
jordanm
fonte
1
usermod funcionou como um encanto. Existe alguma maneira de configurá-lo como padrão para bash quando adiciono um novo usuário ou preciso executar o comando toda vez?
Se você usar adduser, deve configurá-lo para bash por padrão. O padrão é configurado em /etc/adduser.conf. Caso contrário, especifique o shell explicitamente com useradd.
Jordanm
5

Você edita /etc/passwdonde a última entrada é o shell padrão. Faça isso /bin/bash.

Como alternativa, você pode alterar o padrão do sistema de /bin/shnão ser bash.

Dirk Eddelbuettel
fonte
1
O que há com o voto negativo drive-by? Por exemplo, o Ubuntu é padrão para /bin/shser /bin/dash. E pelo que vale as outras duas respostas são idênticas e atingem o mesmo fim por diferentes meios. Tanto faz.
precisa saber é o seguinte
4
As edições manuais de /etc/passwdsão altamente desencorajadas. Um erro de edição pode interromper logins para todos os usuários, exigindo mídia de recuperação ou uma inicialização no modo de usuário único para reparo. Existem ferramentas como usermodpara mudar /etc/passwd.
Jordanm
1
Absurdo. Executando o Linux desde '94 aqui. Nunca foi preso /etc/passwd.
precisa saber é o seguinte
2
É bom saber que você foi muito cuidadoso. Nem todo mundo tem. Outra nota sobre a sua actualização, lançando /bin/bashcomo /bin/shé o mesmo que executá-lo com --posix, que pode ter resultados indesejáveis.
Jordanm
Olha, eu também sou desenvolvedor / mantenedor do Debian desde 1995. Nós costumávamos ter o bash como padrão; mudamos para shells mais simples por vários motivos. Eu tenho usado /bin/bashcomo shell todos esses anos em todas as máquinas. Você precisa de um argumento mais concreto.
precisa saber é o seguinte
2

Você precisa editar seu perfil de usuário, pode fazer isso diretamente, editando o /etc/passwdarquivo ou pode usar o usermodcomando para fazer isso por você. A sintaxe que você procura se parece com isso:

usermod -s /bin/bash joeuser
tylerl
fonte
1

O shell do sistema padrão /bin/shnas versões recentes do Ubuntu está configurado para ser /bin/dash. Simplesmente executando o seguinte comando:

sudo dpkg-reconfigure dash

você pode alterá-lo de volta ao antigo padrão de /bin/bash.

Com isso, você pode obter o efeito desejado de ter bashcomo shell interativo sem alterar nenhuma configuração do usuário (nenhuma chshou usermod), e funcionará para todos os usuários que atualmente possuem o shell definido /bin/sh.

Há apenas uma pequena desvantagem nisso: o tempo de inicialização do Ubuntu pode aumentar um pouco, porque dashleva menos memória para carregar e um pouco mais rápido para executar (não é de admirar - é tão limitado em recursos). Mas acho que será bastante difícil medir esse efeito, especialmente para o ambiente de hospedagem.

Além disso, às vezes é irritante ver scripts de shell que não funcionam corretamente porque eles usam alguns bashrecursos avançados aos quais não há suporte dash. O uso desta receita garantirá que isso não aconteça.

Para mais informações, consulte o wiki do Ubuntu sobre este problema .

mvp
fonte
você deve manter os casos de uso separados: /bin/shé usado como intérprete para scripts de shell compatíveis com POSIX - não é necessariamente o melhor shell interativo; se você quiser bashser o shell do sistema, defina o shell de login preferido usando chshou adduserchamadas apropriadas . using dpkg-reconfigureé uma péssima escolha se userA quer zsh e userB quer bash e ambos insistem em ter / bin / sh como shell padrão.
trema
se userA estiver explicitamente configurado para zsh, e userB para basheles terão. Se UserC configurado para sh, ele vai ter bash, que é atual padrão do Ubuntu para novos usuários de qualquer maneira
mvp
com certeza, mas sua solução sugeriu algo como dpkg-reconfigure zshdefinir zshcomo / bin / sh e, em seguida dpkg-reconfigure dash, dashcomo / bin / sh, que é uma espécie de impasse; Estou dizendo principalmente que é preferível definir o shell de login para o shell que você deseja usar, em vez de passar por aros para tornar o / bin / sh um bom shell de login.
trema
Eu só disse que isso dpkg-reconfigure dashpode fazer shsentido bash, em vez de aleijado dash. Todas as outras conchas ainda estarão intactas.
Mvp
1

No caso em que você esteja tentando usar uma conta compartilhada (por qualquer motivo) e não possa alterar o shell padrão, poderá executar

ssh -t <user@hostname> bash -l

Se você precisar manter seu ambiente afastado de algum outro shell, poderá executá-lo primeiro; por exemplo

ssh -t <user@hostname> ksh -c bash -l
UKMonkey
fonte
Isso funciona muito bem, mas por que a -lopção?
Nbkhope 5/0318
O @nbkhope garantirá que o .bashrc seja executado para você.
UKMonkey
0

Nem chshou usermodestavam trabalhando para mim, mas eu descobri que você pode fazer isso através de massa de vidraceiro.

Vá para Connection > SSHe defina o Remote commandpara bash.

Observe que você não poderá exitacessar seu shell padrão; ele apenas fechará a conexão.

Chris
fonte