example unix shell path ssh

unix - example - ¿Cómo configuro $ PATH para que funcione `ssh user @ host command`?



ssh options (6)

¿Tiene un ~/.bash_login o ~/.bash_profile ?

Bash en modo interactivo busca estos archivos y usa el primero existente , en este orden:

  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile

Entonces, si tiene un ~/.bash_profile , los cambios que haga en ~/.profile se verán.

Bash en modo no interactivo a veces lee el archivo ~/.bashrc (que también suele ser fuente de los scripts interactivos.) Por "a veces" quiero decir que depende de la distribución: bastante extraño, hay un tiempo de compilación opción para habilitar esto. Debian habilita la lectura ~/.bashrc , mientras que por ejemplo Arch no lo hace.

ssh parece estar usando el modo no interactivo, entonces ~/.bashrc debería ser suficiente. Cuando tengo problemas como este, generalmente agrego algunos ecos para ver qué archivos se están ejecutando.

Parece que no puedo establecer una nueva $ PATH de modo que se use al ejecutar comandos a través del comando ssh user@host command . He intentado agregar export PATH=$PATH:$HOME/new_path a ~ / .bashrc y ~ / .profile en la máquina remota, pero ejecutar ssh user@host "echo /$PATH" muestra que el cambio no se ha recogido (muestra / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games). La máquina remota ejecuta Ubuntu 8.04.

Estoy seguro de que podría hackearlo en / etc / profile, pero esa no es una solución limpia y solo funciona cuando uno tiene acceso de root.


Además de @signpolyma answer, tendrá que agregar su exportación antes de estas líneas

# If not running interactively, don''t do anything case $- in *i*) ;; *) return;; esac


Como dijo grawity, ~ / .bashrc es lo que quieres, ya que proviene de shells no interactivos que no son de inicio de sesión.

Supongo que el problema que tienes tiene que ver con el archivo Ubuntu ~ / .bashrc predeterminado. Por lo general, comienza con algo como esto:

# If not running interactively, don''t do anything [ -z "$PS1" ] && return

Desea colocar algo para las conchas no interactivas antes de esta línea.


La documentación de ssh dice:

Si se especifica el comando, se ejecuta en el host remoto en lugar de en un shell de inicio de sesión.

por eso agregar archivos bashrc no funciona. sin embargo, tiene las siguientes opciones:

  1. Si la opción PermitUserEnvironment se establece en la configuración de sshd, puede agregar su configuración de PATH a ~/.ssh/environment

  2. ssh remotemachine ''bash -l -c "somecommand"''


Siempre puedes decir:

ssh remotemachine ''export PATH=wedontneedastinkingpath; echo $PATH''


Solo tuve el mismo problema, lo resolví con:

ssh user@remotehost PATH=/$HOME/bin:/$PATH/; remote-command