21 votos

¿Dónde se suele poner $BASH_ENV?

Tengo dos servidores Linux que deberían estar configurados de forma idéntica, sin embargo los comandos ssh a uno de ellos están fallando para los comandos que requieren una ruta que se especifica en ~/.bashrc. Por ejemplo, puedo usar un comando como pwd tanto de forma interactiva como a través de ssh, pero si intento ejecutar un programa que se encuentra en una carpeta bin de aplicaciones, sólo 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á establecido en ~/.bashrc en el servidor que está funcionando correctamente. Quiero establecer $BASH_ENV en el servidor que no funciona, pero preferiría establecerlo en la misma ubicación que está establecido en el servidor que funciona. ¿Cuáles son los lugares que Linux ejecutará en el momento de un inicio de sesión no interactivo, como un comando ssh desde 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

1 votos

¿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 (sólo los archivos de perfil).

0 votos

No es idéntico, pero el usuario con el que estoy enviando los comandos tiene la misma línea en /etc/passwd en ambos sistemas.

0 votos

¿Y qué pasa con ~/.profile y ~/.bash_profile?

24voto

Andrew B Puntos 9763

BASH_ENV sólo se va a establecer a través del entorno, o de otro script que se obtiene durante la inicialización. Para un no interactivo, sólo intentará obtener archivos adicionales si ese es también un de inicio de sesión. (en cuyo caso leerá ~/.bash_profile , ~/.bash_login y ~/.profile ...pero si lo hiciera, no tendrías el problema)

El primer lugar en el que hay que fijarse es el entorno en el que se está invocando el subshell.

  • Una exportación BASH_ENV se pasará a través de la variable Tenga en cuenta que esto puede estar enterrado en un archivo de origen.
  • Se puede introducir como parámetro en la misma línea que llama al script, es decir BASH_ENV=blah /path/to/somecommand.sh . Esto sobresale como un pulgar dolorido, así que probablemente lo habrías captado.

Si se está configurando después de iniciar la sesión, pero no puede averiguar dónde, es posible que tenga que mirar lo que es responsable de la construcción del entorno de inicio de sesión.

  • Todos los archivos habituales que se obtienen de un inicio de sesión Shell. man bash para la lista exhaustiva.

  • PAM : Como freiheit sugirió en los comentarios, compruebe /etc/security/pam_env.conf y cualquier otro archivo al que haga referencia pam_env.so . Otros módulos PAM también podrían ser responsables, pero si sus configuraciones PAM parecen idénticas probablemente no sea el caso.

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

    • ~/.ssh/environment (antes de cambiar al directorio principal; sólo si PermitUserEnvironment está activado en sshd_config )
    • ~/.ssh/rc (después de cambiar al directorio principal; siempre)
    • /etc/ssh/sshrc (si ~/.ssh/rc no está presente)

Nota: sshd también buscará environment=value líneas en el archivo de claves autorizadas del usuario (si PermitUserEnvironment está activada), pero no está claro en la página de manual dónde se encuentra ese paso en la secuencia anterior.

0 votos

¡He encontrado la diferencia! PermitUserEnvironment yes está configurado en /etc/ssh/sshd_config en el servidor que funciona, pero no en el que tiene el problema. Lo he cambiado, pero acabo de probar un comando y no ha vuelto a funcionar. ¿Este archivo es analizado cada vez que intento conectarme? No tengo un ~/.ssh/rc para el usuario con el que estoy trabajando, y no hay un archivo /etc/ssh/sshrc en ninguno de los dos sistemas.

0 votos

Oh, creo que necesito reiniciar ssh? /etc/init.d/sshd?

0 votos

@Basil Sí, necesitas reiniciar sshd . También significa que puede haber un archivo en el servidor de trabajo (revisa la lista de los que te di para sshd ) que está configurando el entorno.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: