Estou fazendo login em um servidor remoto via ssh como usuário www-data
. O usuário www-data
no servidor tem seu shell padrão definido como /bin/sh
, e quando eu faço login, recebo o traço como meu shell. Posso então digitar bash
e obter bash
shell.
Eu gostaria de fazer login no bash diretamente, quando Eu ssh in. Mas não quero alterar o shell padrão no servidor. Quero que minha alteração afete apenas a sessão ssh.
Eu tentei colocar command="/bin/bash"
na frente da minha chave pública em .ssh/authorized_keys
, mas isso tem outro efeito colateral: enquanto o bash funciona como shell padrão ao fazer login, scp
parou de funcionar. Não consigo mais scp arquivos de ou para o servidor remore.
Como posso definir bash
como shell padrão para sessão ssh, sem quebrar outros aplicativos?
Comentários
sintaxe.
ssh
linha de comando não deve ter nenhum efeito sobre scp
. Resposta
Tenho um problema semelhante em um sistema Eu uso (o shell padrão é bash
, eu quero ksh93
e chsh
não “t trabalho).
Minha solução, adaptada para sua situação, é exec
o shell desejado de ~/.profile
, que Dash lê na inicialização. Bash não toca em ~/.profile
a menos que não encontre ~/.bash_profile
ou ~/.bash_login
(em essa ordem, consulte o manual do Bash).
# in ~/.profile: if [ "$SHELL" != "/usr/bin/bash" -a -n "$SSH_TTY" -a -x /usr/bin/bash ]; then export SHELL="/usr/bin/bash" exec $SHELL -l fi
SSH define SSH_TTY
em sessões SSH interativas, então ” verificando se isso está definido (string não vazia) antes de ter certeza de que o Bash está disponível e executá-lo. Estou configurando e exportando SHELL
no caso de qualquer outro aplicativo olhar para ele e para evitar que o Bash seja executado em um loop infinito devido à ausência de ~/.bash_profile
e ~/.bash_login
e, portanto, tentando executar ~/.profile
novamente.
Comentários
- obrigado. Com uma modificação importante, sua abordagem sugerida funciona. A execução de
$SHELL -l
causou uma bomba de bifurcação. Aparentemente,bash -l
lê.profile
também. Ao omitir-l
, tudo funciona conforme o esperado. - Provavelmente porque você não tem os dois
~/.bash_profile
e~/.bash_login
? - Veja minha edição em minha resposta, o que torna o
if
a instrução falhará se ' já estivermos executando o Bash. (não tenho certeza se isso é realmente necessário, pois ele deve selecionar os outros arquivos init em vez disso).
ssh [email protected] /bin/bash
não ' não funcionou?