¿Dónde se suele establecer $ BASH_ENV?

19

Tengo dos servidores Linux que deben configurarse de manera idéntica, sin embargo, los comandos ssh para uno de ellos fallan para los comandos que requieren una ruta que se especifica en ~ / .bashrc. Por ejemplo, puedo usar un comando como pwdinteractivamente y a través de ssh, pero si intento ejecutar un programa que se encuentra en una carpeta bin de la aplicación, solo funciona en un shell interactivo para uno de los servidores.

El archivo / etc / profile y / etc / environment en ambos servidores son idénticos, sin embargo, $ BASH_ENV está configurado en ~ / .bashrc en el servidor que funciona correctamente. Quiero establecer $ BASH_ENV en el servidor que no funciona, pero preferiría configurarlo en la misma ubicación que está configurado en el servidor de trabajo. ¿En qué lugares se ejecutará Linux en el momento de un inicio de sesión no interactivo, como un comando ssh de otra computadora?

editar: la línea en / etc / passwd para el usuario especifica / bin / bash en ambos servidores. El archivo ~ / .bash_profile para ambos servidores es idéntico y contiene if [ -f ~/.bashrc ]; then . ~/.bashrc; fi. La única diferencia entre los sistemas es que $ BASH_ENV es una cadena nula en el servidor que no funciona, y no puedo encontrar dónde se ha establecido en el servidor que funciona.

editar 2: el archivo ~ / .ssh / environment en ambos servidores tiene BASH_ENV = ~ / .bashrc

Albahaca
fuente
1
¿Es / etc / passwd idéntico en ambos servidores? Si se llama a bash como "/ bin / sh" en lugar de "/ bin / bash", no leerá ningún archivo bashrc (solo archivos de perfil).
Freiheit
No es idéntico, pero el usuario al que envío comandos tiene la misma línea en / etc / passwd en ambos sistemas.
Albahaca
¿Y qué hay de ~ / .profile y ~ / .bash_profile?
Freiheit
son idénticos y ambos contienenif [ -f ~/.bashrc ]; then . ~/.bashrc; fi
Basil
¿Ha verificado que / etc / bashrc y /etc/profile.d/* son idénticos? ~ / .bash_login? /etc/pam.d/*? /etc/security/pam_env.conf?
Freiheit

Respuestas:

21

BASH_ENVsolo se establecerá a través del entorno u otro script que se obtenga durante la inicialización. Para un shell no interactivo, solo intentará obtener archivos adicionales si ese shell también es un shell de inicio de sesión. (en cuyo caso leerá ~/.bash_profile, ~/.bash_loginy ~/.profile... pero si estuviera haciendo eso, no estaría experimentando un problema)

El primer lugar para buscar es el entorno en el que se invoca la subshell.

  • Se BASH_ENVpasará una variable exportada . Tenga en cuenta que esto puede estar enterrado en un archivo de origen.
  • Se puede alimentar como un parámetro en la misma línea que llama al script, es decir BASH_ENV=blah /path/to/somecommand.sh. Esto se destaca como un dolor en el pulgar, por lo que probablemente lo habría atrapado.

Si se configura después de iniciar sesión pero no puede averiguar dónde, es posible que deba ver qué es responsable de construir el entorno de inicio de sesión.

  • Todos los archivos habituales que se obtienen de un shell de inicio de sesión. man bashpara la lista exhaustiva

  • PAM : Como freiheit sugirió en los comentarios, verifique /etc/security/pam_env.confy cualquier archivo adicional al que haga referencia pam_env.so. Otros módulos PAM también podrían ser responsables, pero si sus configuraciones de PAM se ven idénticas, probablemente este no sea el caso.

  • sshd : Escaneará los siguientes archivos, en orden:

    • ~/.ssh/environment(antes de cambiar al directorio de inicio; solo si PermitUserEnvironmentestá habilitado en sshd_config)
    • ~/.ssh/rc (después de cambiar al directorio de inicio; siempre)
    • /etc/ssh/sshrc(si ~/.ssh/rcno está presente)

Nota: sshdtambién buscará environment=valuelíneas en el archivo de claves autorizadas del usuario (si PermitUserEnvironmentestá habilitado), pero no está claro en la página del manual dónde se ubica ese paso en la secuencia anterior.

Andrew B
fuente
¡Encontré una diferencia! PermitUserEnvironment yesestá configurado en / etc / ssh / sshd_config en el servidor de trabajo, pero no el problema. Lo cambié, pero acabo de probar un comando y no volvió a funcionar. ¿Este archivo se analiza cada vez que intento ingresar? No tengo un ~ / .ssh / rc para el usuario en el que estoy trabajando, y no hay ningún archivo / etc / ssh / sshrc en ninguno de los sistemas.
Albahaca
Oh, creo que necesito reiniciar ssh? /etc/init.d/sshd?
Albahaca
@Basil Sí, debes reiniciar sshd. También significa que puede haber un archivo en el servidor de trabajo (consulte la lista de los que le di sshd) que está configurando el entorno.
Andrew B
Sí, esa fue la parte frustrante: todo lo que necesito está configurado en .bashrc, que simplemente no se estaba ejecutando :) Muchas gracias por su ayuda. Estoy programando un cambio para reiniciar SSH e informaré. Supongo que funcionará.
Albahaca
¡Acabo de reiniciar SSH y mis comandos SSH no interactivos ahora están funcionando! Muchas gracias por su ayuda, nunca habría encontrado ese campo por mi cuenta.
Basilio