especificar shell para sessão ssh

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

  • ssh [email protected] /bin/bash não ' não funcionou?
  • @DopeGhoti: I ' m também curioso sobre isso, mas suspeito que ' terá o mesmo problema que com seu

sintaxe.

  • Duvido, pois especificá-la na 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.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).

    Deixe uma resposta

    O seu endereço de email não será publicado. Campos obrigatórios marcados com *