Cuando entro sshen 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/environmentcada vez que hago una llamada ssh. ¿Cómo puedo hacer esto?
ssh
environment-variables
Ross Rogers
fuente
fuente

sshpá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
SendEnvopció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 laTERMvariable 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 laTERMvariable para designar un tipo de terminal conocido. Pase la-topción a ssh si no está iniciando un shell interactivo remoto.env TERM = "información adicional: $ TERM" ssh -t server.example.com 'MYVAR = $ {TERM%: *}; PLAZO = $ {PLAZO ## *:}; exportar MYVAR; mycommand '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
$LOCALVARno contiene comillas simples (').fuente
AcceptEnvlas directivas ensshd_configtan deseada por el administrador. PeroTERMse 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/profileo~/.profileo~/.bashrc)?TERMsolo 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-topción de línea de comando (oRequestTTYen~/.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_configfuente
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_keysarchivo:export VARIABLE=<something>salía inmediatamente y la conexión SSH se cerró (me bloqueó el acceso al servidor), mientras/usr/bin/env ... $SHELLque ejecutará su shell predeterminado con un entorno modificado.fuente
$SHELLpor 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 usarscpo un comando en línea.PermitUserEnvironment yesy usando enenvironment="..."lugar decommand="...".En su cliente local, en su
~/.ssh/configpuede 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_configarchivo 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