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 -lcausou uma bomba de bifurcação. Aparentemente,bash -llê.profiletambém. Ao omitir-l, tudo funciona conforme o esperado. - Provavelmente porque você não tem os dois
~/.bash_profilee~/.bash_login? - Veja minha edição em minha resposta, o que torna o
ifa 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/bashnão ' não funcionou?