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?
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.
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:
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 .
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
Respostas:
Como usuário comum, você pode alterar seu shell de login padrão usando o
chsh
comando Aqui está um exemplo:Outra opção é usar o usermod como root:
fonte
adduser
, deve configurá-lo para bash por padrão. O padrão é configurado em/etc/adduser.conf
. Caso contrário, especifique o shell explicitamente comuseradd
.Você edita
/etc/passwd
onde a última entrada é o shell padrão. Faça isso/bin/bash
.Como alternativa, você pode alterar o padrão do sistema de
/bin/sh
não ser bash.fonte
/bin/sh
ser/bin/dash
. E pelo que vale as outras duas respostas são idênticas e atingem o mesmo fim por diferentes meios. Tanto faz./etc/passwd
sã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 comousermod
para mudar/etc/passwd
./etc/passwd
./bin/bash
como/bin/sh
é o mesmo que executá-lo com--posix
, que pode ter resultados indesejáveis./bin/bash
como shell todos esses anos em todas as máquinas. Você precisa de um argumento mais concreto.Você precisa editar seu perfil de usuário, pode fazer isso diretamente, editando o
/etc/passwd
arquivo ou pode usar ousermod
comando para fazer isso por você. A sintaxe que você procura se parece com isso:fonte
O shell do sistema padrão
/bin/sh
nas versões recentes do Ubuntu está configurado para ser/bin/dash
. Simplesmente executando o seguinte comando:você pode alterá-lo de volta ao antigo padrão de
/bin/bash
.Com isso, você pode obter o efeito desejado de ter
bash
como shell interativo sem alterar nenhuma configuração do usuário (nenhumachsh
ouusermod
), 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
dash
leva 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
bash
recursos avançados aos quais não há suportedash
. O uso desta receita garantirá que isso não aconteça.Para mais informações, consulte o wiki do Ubuntu sobre este problema .
fonte
/bin/sh
é usado como intérprete para scripts de shell compatíveis com POSIX - não é necessariamente o melhor shell interativo; se você quiserbash
ser o shell do sistema, defina o shell de login preferido usandochsh
ouadduser
chamadas apropriadas . usingdpkg-reconfigure
é uma péssima escolha se userA quer zsh e userB quer bash e ambos insistem em ter / bin / sh como shell padrão.zsh
, e userB parabash
eles terão. Se UserC configurado parash
, ele vai terbash
, que é atual padrão do Ubuntu para novos usuários de qualquer maneiradpkg-reconfigure zsh
definirzsh
como / bin / sh e, em seguidadpkg-reconfigure dash
,dash
como / 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.dpkg-reconfigure dash
pode fazersh
sentidobash
, em vez de aleijadodash
. Todas as outras conchas ainda estarão intactas.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
Se você precisar manter seu ambiente afastado de algum outro shell, poderá executá-lo primeiro; por exemplo
fonte
-l
opção?Nem
chsh
ouusermod
estavam trabalhando para mim, mas eu descobri que você pode fazer isso através de massa de vidraceiro.Vá para
Connection > SSH
e defina oRemote command
parabash
.Observe que você não poderá
exit
acessar seu shell padrão; ele apenas fechará a conexão.fonte