Cuando entro ssh
en un servidor, ¿cómo puedo pasar una variable de entorno del cliente al servidor? Esta variable de entorno cambia entre diferentes invocaciones de ssh, por lo que no quiero sobrescribir $HOME/.ssh2/environment
cada vez que hago una llamada ssh. ¿Cómo puedo hacer esto?
ssh
environment-variables
Ross Rogers
fuente
fuente
ssh
página de manual, no veo otra forma de hacerlo que no sea configurar la variable manualmente una vez que haya iniciado sesión en el servidor, a menos que modifique ~ / .ssh2 / environment.Respuestas:
Por supuesto, puede establecer la variable de entorno dentro del comando, sin embargo, tendrá que tener cuidado al citar: recuerde que su shell analizará su línea de comando local, y luego el shell remoto tendrá que ir a la cadena. recibe.
Si desea que una variable obtenga el mismo valor en el servidor que tiene en el cliente, pruebe la
SendEnv
opción:Sin embargo, esto requiere soporte del servidor. Con OpenSSH, se debe autorizar el nombre de la variable
/etc/sshd_config
.Si el servidor solo permite ciertos nombres de variables específicas, puede evitarlo; por ejemplo, una configuración común permite
LC_*
, y puede hacer lo siguiente:Si incluso
LC_*
no es una opción, puede pasar información en laTERM
variable de entorno, que siempre se copia (sin embargo, puede haber un límite de longitud). Todavía tendrá que asegurarse de que el shell remoto no restrinja laTERM
variable para designar un tipo de terminal conocido. Pase la-t
opción a ssh si no está iniciando un shell interactivo remoto.Otra posibilidad es definir la variable directamente en el comando:
Por lo tanto, si pasa una variable local:
Sin embargo, tenga cuidado con los problemas de citas: el valor de la variable se interpolará directamente en el fragmento de shell ejecutado en el lado remoto. El último ejemplo anterior supone que
$LOCALVAR
no contiene comillas simples ('
).fuente
AcceptEnv
las directivas ensshd_config
tan deseada por el administrador. PeroTERM
se trata especialmente, por lo que sé, no hay forma de filtrarlo en el lado del servidor (se establece en el entorno del shell, independientemente de cualquier configuración). ¿Estás seguro de que no hay un script de perfil que lo anule (como/etc/profile
o~/.profile
o~/.bashrc
)?TERM
solo se transmite si el cliente solicita al servidor que asigne un tty. Si no hay terminal en el lado remoto, sería inútil transmitirTERM
. Cuando especifica un comando, si desea tener un terminal en el lado remoto, necesita la-t
opción de línea de comando (oRequestTTY
en~/.ssh/config
).Si puede administrar el host de destino, puede configurar sshd para permitir pasar sus variables de entorno locales al host de destino.
Desde la página de manual de sshd_config:
la configuración de sshd generalmente vive en
/etc/ssh/sshd_config
fuente
Entonces, en su cliente, ¿tiene alguna variable de entorno y desea que esté disponible para el comando remoto? No creo que haya una manera de que ssh lo pase mágicamente, pero probablemente puedas hacer algo como esto. En lugar de usar, diga:
Puedes hacerlo:
fuente
La respuesta de @ emptyset (que no funcionó para mí) me llevó a esta respuesta:
Puede agregar este comando a su
~/.ssh/authorized_keys
archivo:export VARIABLE=<something>
salía inmediatamente y la conexión SSH se cerró (me bloqueó el acceso al servidor), mientras/usr/bin/env ... $SHELL
que ejecutará su shell predeterminado con un entorno modificado.fuente
$SHELL
por un caparazón real? Compruebe también que / usr / bin / env existe en el servidor. Sin embargo, la solución no es perfecta: he notado que se cuelga cuando quería usarscp
o un comando en línea.PermitUserEnvironment yes
y usando enenvironment="..."
lugar decommand="..."
.En su cliente local, en su
~/.ssh/config
puede agregarSetEnv
, por ejemploNota: Verificar
man ssh_config
.Luego, en el servidor, asegúrese de permitir que el cliente pase ciertas variables de entorno en su
/etc/ssh/sshd_config
archivo de configuración:Nota: Verificar
man sshd_config
.fuente
Puede intentar invocar un comando personalizado, suponiendo que tenga una configuración de inicio de sesión ssh sin contraseña. En el servidor, edite su entrada ~ / .ssh / Authorized_keys que corresponda a la clave de su cliente:
Mire este enlace en la sección Comando forzado para obtener un poco más de detalle.
fuente
Estaba haciendo una compilación personalizada de OpenSSH para un dispositivo con un cramfs en el directorio de inicio y / etc (Cram FS es de solo lectura) para que ~ / .ssh / environment no funcionaría sin reconstruir todo el FS y estos se desplegaron en campo dispositivos (sistemas integrados, de ahí el uso de CRAMFS). Puede especificar en sshd_config la ubicación del archivo authroized_keys, pero por alguna razón el entorno = solo funciona para las variables de entorno en ~ / .ssh / authroized_keys. Editar el / etc / profile no era una opción y tuve que cargar ssh en un directorio no estándar. En session.c después de child_set_env (... "MAIL" ...) simplemente agregue las variables de entorno que necesita (este es un truco que sé ...) pero solo en caso de que alguien necesite algunos envs codificados para una sesión si está compilando desde la fuente puedes hacer esto. TGI-FLOSS
fuente
solo un comando simple:
fuente