¿Cómo puedo crear una conexión SSH persistente para "transmitir" comandos durante un período de tiempo?

¿Cómo puedo crear una conexión SSH persistente para "transmitir" comandos durante un período de tiempo?

Digamos que tengo una aplicación ejecutándose en una PC que envía comandos a través de SSH a otra PC en la red (ambas máquinas ejecutan Linux).

Por ejemplo, cada vez que sucede algo en el n.º 1, quiero ejecutar una tarea en el n.º 2. En esta configuración, tengo que crear una conexión SSH en cada comando.

¿Existe alguna forma sencilla de hacer esto con herramientas básicas de Unix sin programar una aplicación cliente/servidor personalizada? Básicamente, todo lo que quiero es establecer una conexión a través de SSH y luego enviar un comando tras otro.

Respuesta1

No estoy seguro de si se puede utilizar en producción, pero puedes hacer algo como esto:

crear archivo en el n.° 1

1>touch /tmp/commands

Luego ejecute el comando:

1>tail -f /tmp/commands | ssh [email protected]

Eso abrirá el archivo /tmp/commands y comenzará a enviar su contenido al servidor xxxx (#2) y lo ejecutará allí línea por línea.

ahora, cada vez que suceda algo en el n.° 1, haga:

1>echo "ls -l" >> /tmp/commands

o

1>echo "reboot" >> /tmp/commands

todo lo que agregue al archivo /tmp/commands se enviará al n.° 2 y se ejecutará. Solo asegúrese de no ejecutar nada interactivo ni solucionarlo de alguna manera.

Respuesta2

Persistencia automática usando OpenSSH

También puede utilizar la ControlMasterfunción OpenSSH, que abre un socket de dominio Unix para la primera conexión y reutiliza esta conexión en todas las llamadas posteriores.

Para habilitar la función, puede usarla -Mcomo interruptor de línea de comando o habilitar la ControlMasteropción en su archivo ~/.ssh/ssh_config, por ejemplo:

ControlMaster auto

Además, debe configurar el ControlPathuso de las siguientes líneas en su ~/.ssh/ssh_config:

Host *
   ControlPath ~/.ssh/master-%r@%h:%p

Para mantener una conexión persistente con un host, por ejemplo, si desea ejecutar un script que necesita establecer muchas conexiones ssh con el host, ninguna de las cuales es persistente durante toda la vida útil del script, puede iniciar una conexión silenciosa de antemano usando:

ssh -MNf remotehost

Cheerio, Nesono

Respuesta3

Además/etc/ssh/ssh_config

# Send keep alive signal to remote sshd
ServerAliveInterval 60

Respuesta4

sí, es posible con una tubería:

echo 'echo "hi"' | ssh -i my_private_key tester@host2

esto ejecutará el comando echo "hi" en host2

solo tienes que escribir un programa, que simplemente proporcione los comandos (no olvides el;) y luego canalice esa salida a ssh

información relacionada