Esta pregunta ya tiene una respuesta aquí:
¿Cómo puedo pasar un valor a un comando ssh, de modo que el entorno que se inicia en la máquina host comienza con una determinada variable de entorno establecida a mi elección?
EDITAR: El objetivo es pasar el escritorio kde actual (desde dcop kwin KWinInterface currentDesktop) al nuevo shell creado para que pueda devolver las ubicaciones nfs a mi instancia JEdit en el servidor original que es único para cada escritorio KDE. (Usando un mecanismo como emacsserver / emacsclient )
La razón por la que varias instancias ssh pueden estar en vuelo al mismo tiempo es porque cuando estoy configurando mi entorno, estoy abriendo un montón de instancias ssh diferentes a diferentes máquinas.
fuente
La
SendEnv
opción es tu chico.~ / .ssh / config: (localmente)
/ etc / ssh / sshd_config: (en el extremo remoto)
Ahora, cualquiera que sea el valor de
$MYVAR
localmente, también estará disponible en la sesión remota.Si inicia sesión varias veces, cada sesión tendrá su propia copia de
$MYVAR
, posiblemente con diferentes valores.~/.ssh/environment
está destinado a otros fines. Actúa como un$ENV
archivo cuando se ejecutan comandos que no son de shell de forma remota.fuente
ssh myserver -o SendEnv="MYVAR"
, para que pueda hacerlo dinámico en los scripts.Puede pasar valores con un comando similar al siguiente:
Puedes probar con:
En tcsh, lo siguiente parece funcionar:
fuente
&&
). Usar bash, enexport VAR=value;
lugar de setenv en la tercera forma, funciona para este caso.ssh user@host "$(<env_to_source.sh) command ..."
. En env a la fuente, tengoexport var=value ;
en líneas separadas (recuerde el punto y coma).También hay un horrible, horrible truco.
Si su script está consumiendo la variable en el extremo remoto (es decir, puede nombrarla como desee), puede abusar de las variables locales. Cualquier variable de la forma LC_ * se pasará literalmente, sin necesidad de configuración alguna.
Por ejemplo, tenemos una serie de servidores de bastion en uno de mis clientes. Odio tener que conectarme a él, solo para conectarme a otro servidor ... y a otro servidor ... todo el tiempo. Tengo un script que se comporta como SSH, excepto que es inteligente.
Básicamente, si LC_BOUNCE_HOSTS está configurado, lo divide en espacios y despega el primer host. Luego rebota y ejecuta el mismo script. En el nodo de destino, esta lista finalmente está vacía, por lo que ejecuta el comando. También tengo un modo de depuración (que es excelente durante los problemas de red), establecido por LC_BOUNCE_DEBUG. Como ssh me pasa todo esto mágicamente, no tengo que hacer nada más que reconocer el final de la lista de hosts (lo que hago con una opción -).
Me siento sucio cada vez que uso esto, pero funciona en todas partes donde lo he probado.
fuente
ProxyCommand
opción integrada de OpenSSH ? Edite su~/.ssh/config
y agregue un bloque comoHost *.example.com: ProxyCommand -ssh -W %h:%p bastionhost
y deje que haga un túnel de sus conexiones por usted.En bash probé con:
fuente