Estoy especificando la ruta a mi comando en el archivo / etc / profile :
export PATH=$PATH:/usr/app/cpn/bin
Mi comando se encuentra en:
$ which ydisplay
/usr/app/cpn/bin/ydisplay
Entonces, cuando realizo la salida "echo $ PATH" se ve así:
$ echo $PATH
...:/usr/app/cpn/bin
Y todo está bien, pero cuando intento iniciar mi comando a través de SSH obtengo un error:
$ ssh 127.0.0.1 ydisplay
$ bash: ydisplay: command not found
Pero el mi camino todavía está presente:
$ ssh 127.0.0.1 echo $PATH
...:/usr/app/cpn/bin
Explíqueme por qué Bash no puede encontrar ydisplay durante la sesión SSH y cómo configurar SSH correctamente para evitar este problema.
Además, si especifico $ PATH en el archivo local .bashrc en el usuario actual, todo funciona correctamente. Pero quiero modificar solo un archivo en lugar de especificar muchos archivos para cada usuario. Es por eso que estoy preguntando.
ydisplay
trabajo? hacessh 127.0.0.1 /usr/app/cpn/bin/ydisplay
el trabajo?ssh 127.0.0.1 echo $PATH
no hace lo que podría pensar que hace: el shell expande $ PATH antes de que incluso se ejecute ssh, por lo que eso no prueba ni refuta nada.Respuestas:
tl; dr
Ejecutando
ssh 127.0.0.1 ydisplay
fuentes en~/.bashrc
lugar de/etc/profile
. Cambia tu camino en su~/.bashrc
lugar.detalles
El único momento que
/etc/profile
se lee es cuando su shell es un "shell de inicio de sesión".Del Manual de referencia de Bash :
Pero cuando ejecuta
ssh 127.0.0.1 ydisplay
,bash
no se inicia como un shell de inicio de sesión. Sin embargo, sí lee un archivo de inicio diferente. El Manual de referencia de Bash dice:Entonces deberías poner tu
PATH
configuración~/.bashrc
.En la mayoría de los sistemas, las
~/.bash_profile
fuentes~/.bashrc
, por lo que puede colocar su configuración solo en~/.bashrc
lugar de colocarla en ambos archivos.No hay manera estándar para cambiar la configuración para todos los usuarios, pero la mayoría de los sistemas tienen una
/etc/bashrc
,/etc/bash.bashrc
o similar.De lo contrario, configure
pam_env
y ponga laPATH
configuración/etc/environment
.Ver también:
fuente
Históricamente, los archivos de perfil (
/etc/profile
y~/.profile
) fueron invocados cuando inició sesión (en la consola de texto, ¿qué más?) Y sirvieron para muchos propósitos:stty
. Ej .).Todos estos propósitos no se identificaron como separados hasta más tarde. Debido a que los scripts de perfil pueden hacer cosas que solo tienen sentido en una sesión interactiva (interacción de terminal, iniciar otros programas), cuando se introdujo la invocación de shell remoto ( rsh ), las marcas de rsh decidieron no invocar el shell remoto como un shell de inicio de sesión, para que los scripts de perfil no se ejecuten. (Algunas versiones de
rshd
tienen una opción para ejecutar el shell remoto como un shell de inicio de sesión). Ssh copió este comportamiento para ser un reemplazo directo de rsh.Si desea ejecutar sus scripts de perfil, puede invocarlos explícitamente.
Tenga en cuenta el comando
.
para cargar los scripts de perfil dentro del shell: son comandos que se ejecutarán dentro de ese shell, no un programa externo.Si desea establecer una variable de entorno globalmente para todos los usuarios, hay otro método en muchos sistemas: en lugar de definirlo en
/etc/profile
, defínalo en/etc/environment
. Este archivo se lee a través delpam_env
módulo; la mayoría de las distribuciones de Linux están configuradas para leerlo.Si su shell de inicio de sesión es bash, existe otra posibilidad. Normalmente, no debe establecer variables de entorno en
.bashrc
(porque no se establecerán en sesiones X, excepto si pasa por un terminal con un shell interactivo, porque no se establecerán si inicia sesión de forma interactiva en una consola de texto o más ssh, porque anularán la configuración personalizada si invoca un shell dentro de otro programa). Sin embargo, bash tiene una característica extraña que nunca he entendido: se lee~/.bashrc
en dos circunstancias no relacionadas:rshd
osshd
.Cuando ejecuta un comando sobre ssh, se encuentra en el segundo caso. Puede organizar la lectura de su perfil leyendo
/etc/profile
y.profile
desde.bashrc
. Incluya el siguiente código en su~/.bashrc
:fuente