Sourcing BASH_ENV para comandos SSH não interativos

0

Espero obter o $BASH_ENV var como fonte para comandos ssh não interativos.

Eu vejo o meu BASH_ENV:

ssh server.example.com env | grep BASH
BASH_ENV=/tmp/set_bash_env_profile

Se eu fizer login ssh simples, e env | wc -l obter 85, graças a $BASH_ENV env var, mas se:

ssh server.example.com env | wc -l
17

Eu tenho apenas 17 ...

Eu tentei ForceCommand no sshd_config como descrito aqui mas no meu caso, o SSH_ORIGINAL_COMMAND não está sendo definido.

    
por lzc 13.09.2016 / 23:09

1 resposta

1

Presumivelmente, você está definindo BASH_ENV em seu .bashrc . O Bash carrega .bashrc quando é interativo e não é um shell de login, ou quando é um shell de login chamado pelo rshd ou (em muitas distribuições, mas é uma opção em tempo de compilação) sshd. Isso é tarde demais para esta instância do bash. Coloque os comandos diretamente em ~/.bashrc .

# .bashrc
if [[ $- = *i* ]]; then
  # Commands for interactive use: prompt, aliases, key bindings, etc.
  # Don't set environment variables here, that goes in .profile.
else
  # Commands executed only on remote logins.
  # You can set environment variables here. Do not output anything.
fi

Se você só precisa definir variáveis de ambiente, você pode usar ~/.pam_environment , que é usado para qualquer tipo de login. Veja Qual é a melhor distro / shell- maneira agnóstica de definir variáveis de ambiente?

Para outras formas de executar comandos ao efetuar login não-interativamente no SSH, consulte arquivos de inicialização sh sobre ssh

    
por 14.09.2016 / 03:32

Tags