especifica shell para a sessão ssh

3

Eu estou registrando em um servidor remoto via ssh como usuário www-data . O usuário www-data no servidor tem seu shell padrão configurado como /bin/sh e, quando eu efetuo login, fico com o dash como meu shell. Eu posso digitar bash e obter bash shell.

Eu gostaria de entrar no bash diretamente, quando eu ssh dentro Mas eu não quero mudar o shell padrão no servidor. Eu quero que minha mudança apenas afete a sessão ssh.

Eu tentei colocar command="/bin/bash" infront da minha chave pública em .ssh/authorized_keys , mas isso tem outro efeito colateral: enquanto o bash funciona como shell padrão ao efetuar login, scp parou de funcionar. Não consigo mais arquivos scp para ou do servidor remore.

Como posso definir bash como shell padrão para a sessão ssh, sem quebrar outros aplicativos?

    
por Martin Vegter 16.06.2016 / 07:10

1 resposta

5

Eu tenho um problema semelhante em um sistema que uso (o shell padrão é bash , quero ksh93 e chsh não funciona).

Minha solução, adaptada para sua situação, é exec do shell desejado de ~/.profile , que Dash lê na inicialização. O Bash não toca em ~/.profile a menos que não encontre ~/.bash_profile ou ~/.bash_login (nessa ordem, veja 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

O SSH define SSH_TTY em sessões SSH interativas, portanto, estamos verificando se está definido (string não vazia) antes de garantir que o Bash esteja disponível e executando-o. Estou definindo 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 à falta de ~/.bash_profile e ~/.bash_login e, assim, tentar executar ~/.profile novamente.

    
por 16.06.2016 / 08:34

Tags