2010-12-10 10 views
30

Trabajo con varios servidores diferentes, y sería útil poder establecer algunas variables de entorno para que estén activas en todas ellas cuando SSH esté en. El problema es que el contenido de algunas de las variables contiene información confidencial (Contraseñas hash), así que no quiero dejarlo en un archivo .bashrc. Me gustaría guardarlo solo en la memoria.¿Puedo reenviar variables de env sobre ssh?

Sé que puede usar SSH para reenviar la variable DISPLAY (a través de ForwardX11) o un proceso de Agente SSH (a través de ForwardAgent), así que me pregunto si hay una forma de reenviar automáticamente el contenido de variables de entorno arbitrarias a través de SSH conexiones. Idealmente, algo que podría establecer en un archivo .ssh/config para que se ejecute automáticamente cuando lo necesite. ¿Algunas ideas?

Respuesta

22

Puede, pero requiere cambiar la configuración del servidor.

Lee las entradas para AcceptEnv en sshd_config(5) y SendEnv en ssh_config(5).

actualización:

También se puede pasar en la línea de comando:

ssh [email protected] "FOO=foo BAR=bar doz" 

En cuanto a seguridad, nota que cualquiera con acceso a la máquina remota será capaz de ver las variables de entorno pasaron a cualquier proceso en ejecución.

Si desea mantener esa información en secreto es mejor pasarlo por stdin:

cat secret_info | ssh [email protected] remote_program 
+1

Me tomó un poco de tiempo antes de recordar que tenía que reiniciar sshd para que vuelva a leer sus archivos de configuración, pero una vez que lo hice, 'AcceptEnv' y' SendEnv' funcionaron como un hechizo. ¡Exactamente lo que estaba buscando! ¡Gracias! – singingwolfboy

11

No se puede hacer de forma automática (excepto por $DISPLAY que se puede remitir con -X junto con su información de manera Xauth programas remotos en realidad puede conectarse a su pantalla) pero se puede utilizar una secuencia de comandos con un "aquí el documento":

ssh ... <<EOF 
export FOO="$FOO" BAR="$BAR" PATH="\$HOME/bin:\$PATH" 
runRemoteCommand 
EOF 

Las variables sin protección se expandirán localmente y el resultado se transmitirá al lado remoto. Por lo tanto, el PATH se configurará con el valor remoto de $HOME.

+0

La parte locally' 'se ampliarán las variables sin escape salvó mi día. Esto no fue explicado en otros manuales. ¡Gracias! – Kolyunya

Cuestiones relacionadas