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 pwd
interactivamente 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
if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
Respuestas:
BASH_ENV
solo 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_login
y~/.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.
BASH_ENV
pasará una variable exportada . Tenga en cuenta que esto puede estar enterrado en un archivo de origen.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 bash
para la lista exhaustivaPAM : Como freiheit sugirió en los comentarios, verifique
/etc/security/pam_env.conf
y cualquier archivo adicional al que haga referenciapam_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 siPermitUserEnvironment
está habilitado ensshd_config
)~/.ssh/rc
(después de cambiar al directorio de inicio; 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 (siPermitUserEnvironment
está habilitado), pero no está claro en la página del manual dónde se ubica ese paso en la secuencia anterior.fuente
PermitUserEnvironment yes
está 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.sshd
. También significa que puede haber un archivo en el servidor de trabajo (consulte la lista de los que le disshd
) que está configurando el entorno.