¿Por qué el $ PATH de un comando remoto ssh difiere del de un shell interactivo?

Pregunta:

Tengo un usuario que no ha realizado modificaciones en $ PATH en ningún archivo de puntos: es exactamente la configuración predeterminada del sistema. Desde un shell de inicio de sesión:

$ ssh example.com
user@example.com:~$ cat /tmp/hello.hs
#!/bin/bash

echo "$SHELL"
echo "$PATH"

user@example.com:~$ /tmp/hello.hs
/bin/bash
/usr/local/bin:/usr/bin:/bin

Exactamente como se especifica en /etc/profile . Esto me parece bastante inesperado:

$ ssh example.com '/tmp/hello.sh'
/bin/bash       
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games

Como dije, no hay modificación de $ PATH en ~/.bashrc , ni en /etc/bash.bashrc . Tampoco ~/.ssh/environment . ssh(1) declara que la variable de entorno PATH es

Establezca la RUTA predeterminada, como se especificó al compilar ssh.

pero este hilo de StackOverflow y este artículo de la lista de correo sugieren que debería poder influir en $ PATH para un comando dado simplemente modificando / etc / profile, uno de los archivos de inicio de shell, etc.

¿Que está pasando aqui?

Respuesta:

De la página del manual ssh(1) : "Si se especifica un comando, se ejecuta en el host remoto en lugar de en un shell de inicio de sesión".

Entonces, en resumen, cuando realmente inicia sesión en la máquina, bash se inicia como un shell de inicio de sesión y carga los archivos apropiados, cuando se conecta de forma remota y emite un comando, se ejecuta en el lugar de bash, lo que significa que estos archivos NO se cargan. Puede su -l -c usando su -l -c o similar en la parte de comando de ssh.

En algunos casos, también he visto el argumento -t para que ssh funcione (asigne tty).

Edición 1 :
Creo que la información de PATH que encontró, que la ruta predeterminada (a menos que la anulemos) es la que está compilada en sshd. Me aseguré de que mi / etc / profile, / etc / bash *, dotfiles locales, etc. no tuvieran ninguna información de PATH, luego inicié sesión y todavía tenía un PATH. Busqué este en sshd y lo encontré allí. Así es como dice la página de manual:

ahnberg@remote$ strings /usr/sbin/sshd | grep -i x11 | grep bin
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games

Luego agrego PATH=$PATH:/my/test en la parte superior de mi archivo .bashrc en el control remoto, y lo verifico nuevamente:

ahnberg@local$ ssh ahnberg@remote "env | grep PATH"
PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/my/test

Entonces puedo influir absolutamente en él, y la RUTA predeterminada es la que se compila en sshd. 🙂

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım