Cómo ejecutar un comando ssh multilínea almacenado en una variable

Cómo ejecutar un comando ssh multilínea almacenado en una variable

Contexto: estoy intentando ejecutar un montón de comandos en una máquina remota a la que no puedo acceder directamente. Primero tengo que ingresar mediante ssh a una máquina de puerta de enlace, luego utilizar ssh desde allí y ejecutar los comandos.

Básicamente, lo que busco es una forma de empaquetar un conjunto de comandos que pueda pasar a través de cualquier número de niveles de ssh. Se puede hacer esto? Sospecho que la mejor respuesta será usar scp para copiar un script y luego ejecutarlo, que es una opción.

Tenga en cuenta que he utilizado el comando hostname como una forma de mostrar lo que está pasando; ¡eso no es lo que realmente quiero hacer!

A partir de un comando que realiza un único ssh y ejecuta un conjunto de comandos de varias líneas allí:

ssh gateway.my.company "
  hostname;
  hostname;
"

Esto funciona bien. La salida es algo como:

target_machine
target_machine

Luego almacené el conjunto de comandos en una variable y lo pasé:

command="
  hostname;
  hostname;
"
ssh gateway.my.company $command

El resultado de es exactamente el mismo: ambos hostnamecomandos se ejecutan en el objetivo.

A continuación, agrego el salto ssh adicional (a la máquina privada):

ssh gateway.my.company ssh target_machine_ip $command

Esta vez los dos hostnamecomandos se ejecutan en máquinas diferentes:

target_machine
gateway_machine

Parece que puedo resolver este paso colocando el cmd entre comillas escapadas (es decir \"$command\"), pero si lo hago, tendré que ajustarlo de manera diferente para el caso directo, ya que ssh gateway.my.company \"$command\"ya no funciona.

NOTA: Aprecio que los comandos no deban almacenarse en una variable sino en una función, pero como estoy usando ssh, cualquier función que declare no existirá una vez que haya ingresado por ssh al siguiente servidor.

EDITAR: La pregunta original omitió el segundo salto, ¡lo siento!

Respuesta1

sólo te faltan algunas citas:

ssh gateway.my.company "$command"

información relacionada