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 ControlMaster
funció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 -M
como interruptor de línea de comando o habilitar la ControlMaster
opción en su archivo ~/.ssh/ssh_config
, por ejemplo:
ControlMaster auto
Además, debe configurar el ControlPath
uso 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