cómo deshabilitar las variables SendEnv establecidas en ssh_config desde ~ / .ssh / config

30

No pude encontrar eso en ningún lado, así que me pregunto si soy el único que tiene ese problema.

Por defecto, ssh en Red Hat y Debian al menos tiene un ssh_config con la opción SendEnv que pasa las variables LC * y LANG en la sesión remota. Si uno no es root para cambiar / etc / ssh / ssh_config, ¿cómo puede deshabilitar ese comportamiento? La opción SendEnv parece estar acumulando y no veo ninguna forma de restablecerla.

Y para evitar que me pregunten, debo evitar pasar mi configuración regional a máquinas de prueba para evitar efectos secundarios en los scripts y los programas que dependen de que la configuración regional sea la predeterminada para la máquina.

akostadinov
fuente
Esta no es una respuesta a su pregunta, pero ¿puede resolver su problema invocando los scripts y programas en sus máquinas de prueba a través envo con un script de envoltura?
Scott
2
sí, las soluciones son posibles pero inconvenientes
akostadinov

Respuestas:

18

No eres el único . Como se documenta en ssh_config(5)usted no puede desarmar SendEnv, porque

Varias variables de entorno pueden estar [...] distribuidas en múltiples directivas SendEnv.

Sin embargo, si tiene root en las máquinas de prueba, puede cambiar AcceptEnvpara no aceptar variables enviadas por el cliente.

Ansgar Wiechers
fuente
44
basura, solo veo que -F en la línea de comandos puede ayudar, pero es demasiado inconveniente para usar realmente. Ver bugzilla.mindrot.org/show_bug.cgi?id=1285
akostadinov
5

Esto no se puede hacer ~/.ssh/configporque SendEnvno se puede anular.

El uso de alias no funcionará para los scripts que llaman a ssh.

Una alternativa es exportar una función. Ej. En ~/.bashrc:

function ssh() {
    LANG="en_US.UTF-8" \
    LC_ADDRESS="$LANG" \
    LC_IDENTIFICATION="$LANG" \
    LC_MEASUREMENT="$LANG" \
    LC_MONETARY="$LANG" \
    LC_NAME="$LANG" \
    LC_NUMERIC="$LANG" \
    LC_PAPER="$LANG" \
    LC_TELEPHONE="$LANG" \
    LC_TIME="$LANG" \
    LC_ALL="$LANG" \
    /usr/bin/ssh $@
}
export -f ssh
Fernando Correia
fuente
1

Hay una opción SetEnv, uno puede forzar LANGalgún valor específico antes de enviarlo.

También la página del manual dice que

Es posible borrar los nombres de variables SendEnv previamente configurados prefijando patrones con -.

pero no pude hacer que esto funcione.

burunduk3
fuente
Ver bugzilla.mindrot.org/show_bug.cgi?id=1285 , probablemente eso explicará por qué el -enfoque no funcionó. Sin embargo, es una buena sugerencia para codificar LANG remota y otros vars en ssh config. Hace las cosas más predecibles. Quizás SetEnves una directiva más nueva porque nadie más sugirió al respecto. SetEnv LANG=en_US.UTF-8
akostadinov
0

Si está utilizando bash, puede configurar un alias ssh = 'LANG = command ssh' para deshabilitar el paso de LANG a los otros servidores.

Tharrrk
fuente
0

Puede usar su - yourusercuando haya iniciado sesión a través de ssh. Esto reinicializará el entorno para el usuario.

En realidad, inicializa una nueva sesión con un nuevo entorno.

Lambert
fuente
La pregunta es tener un entorno sano automáticamente. Y por cierto, su no siempre está instalado. Y tiene que escribir su contraseña con su. Inútil. Hay soluciones más fáciles.
akostadinov
0

De acuerdo a man ssh:

 -F configfile
         Specifies an alternative per-user configuration file.  If a con-
         figuration file is given on the command line, the system-wide
         configuration file (/etc/ssh/ssh_config) will be ignored.  The
         default for the per-user configuration file is ~/.ssh/config.

Por lo tanto, puede ssh sin cumplir/etc/ssh/ssh_config especificando explícitamente el archivo de configuración (predeterminado) en la línea de comando ( ~/.ssh/configestá bien que esté vacío):

$ touch ~/.ssh/config
$ ssh -F ~/.ssh/config your_user@your_host

Puede hacer un alias para ello en ~/.bashrc:

alias ssh="ssh -F ~/.ssh/config"

Reinicie el shell bash, luego simplemente puede hacer ssh de esta manera:

$ ssh your_user@your_host
Rockallita
fuente
Ver mi comentario arriba. if one supplies on command line -F, then the system wide config is ignored according to man pagede bugzilla.mindrot.org/show_bug.cgi?id=1285 ; Es una opción, pero no es realmente la característica deseada.
akostadinov