Onde geralmente é $ BASH_ENV definido?

15

Eu tenho servidores Linux gêmeos que devem ser configurados de forma idêntica, no entanto, os comandos ssh para um deles estão falhando em comandos que exigem um caminho especificado em ~ / .bashrc. Por exemplo, posso usar um comando como pwd de forma interativa e por meio do ssh, mas se eu tentar executar um programa localizado em uma pasta bin do aplicativo, ele só funcionará em um shell interativo para um dos servidores.

O arquivo / etc / profile e / etc / environment em ambos os servidores são idênticos, no entanto $ BASH_ENV é definido como ~ / .bashrc no servidor que está funcionando corretamente. Eu quero definir $ BASH_ENV no servidor que não está funcionando, mas eu prefiro configurá-lo no mesmo local que está definido no servidor de trabalho. Quais são os lugares que o Linux executará no momento de um login não interativo, como um comando ssh de outro computador?

edite: A linha em / etc / passwd para o usuário especifica / bin / bash em ambos os servidores. O arquivo ~ / .bash_profile para ambos os servidores é idêntico e contém if [ -f ~/.bashrc ]; then . ~/.bashrc; fi . A única diferença entre os sistemas é que $ BASH_ENV é uma string nula no servidor que não está funcionando, e não consigo encontrar onde ela foi configurada no servidor que está funcionando.

edição 2: O arquivo ~ / .ssh / environment em ambos os servidores tem BASH_ENV = ~ / .bashrc

    
por Basil 06.05.2014 / 19:58

1 resposta

18

BASH_ENV só será definido por meio do ambiente ou outro script originado durante a inicialização. Para um shell não interativo, ele estará apenas tentando obter arquivos adicionais se esse shell também for um shell de login. (nesse caso, ele lerá ~/.bash_profile , ~/.bash_login e ~/.profile ... mas, se estiver fazendo isso, você não estará tendo problemas)

O primeiro lugar para procurar é o ambiente no qual a subshell está sendo invocada.

  • Uma variável BASH_ENV exportada será transmitida. Tenha em mente que isso pode estar enterrado em um arquivo de origem.
  • Ele pode ser inserido como um parâmetro na mesma linha que chama o script, ou seja, BASH_ENV=blah /path/to/somecommand.sh . Isso se destaca como um polegar dolorido, então você provavelmente teria pego isso.

Se ele estiver sendo definido depois que você fizer login, mas não conseguir descobrir onde, talvez seja necessário analisar o que é responsável pela construção do ambiente de login.

  • Todos os arquivos usuais que são originados por um shell de login. man bash para a lista exaustiva.

  • PAM : Como o freiheit sugeriu nos comentários, verifique /etc/security/pam_env.conf e todos os arquivos adicionais referenciados por pam_env.so . Outros módulos PAM também podem ser responsáveis, mas se suas configurações do PAM forem idênticas, provavelmente não é o caso.

  • sshd : Ele irá verificar os seguintes arquivos, na ordem:

    • ~/.ssh/environment (antes de mudar para o diretório inicial; somente se PermitUserEnvironment estiver ativado em sshd_config )
    • ~/.ssh/rc (depois de mudar para o diretório inicial; sempre)
    • /etc/ssh/sshrc (se ~/.ssh/rc não estiver presente)

Observação: sshd também verificará environment=value linhas no arquivo de chaves autorizadas do usuário (se PermitUserEnvironment estiver ativado), mas não fica claro na página do manual em que essa etapa se enquadra na sequência acima. / p>     

por 06.05.2014 / 21:13

Tags