¿Cómo puedo mantener abierta la connection ssh y usarla desde scripts de shell?

Actualmente invoco lo siguiente:

$ ssh me@host.com my_cmd 

Esto es lento y no es fácil de automatizar de forma segura. Me gustaría establecer una connection ssh una vez y tener alguna secuencia de commands que reenvíe mis commands a host.com e imprima los resultados.

Es eso posible ?

Agregar mi máquina a authorized_keys no es una opción para mí y no resolvería el problema de la lentitud.

La característica se llama ControlMaster que multiplexa en un canal existente. Esto hará que hagas todo el intercambio de keys y el inicio de session una sola vez y los commands posteriores pasarán mucho más rápido. Lo activas usando estas tres líneas en tu .ssh/config :

 Host host.com ControlMaster auto ControlPath ~/.ssh/master-%C # for openssh < 6.7 you need to use this one: # ControlPath ~/.ssh/master-%r@%h-%p ControlPersist 5m 

Puede ajustarlo a sus necesidades; Una alternativa es que podría abrir una connection maestra que permanezca abierta durante sus otros commands; entonces no necesitarías ControlPersist .

Hay muchas posibilidades con esta function para ajustar, pero asegúrese de save su socket ControlPath en un lugar seguro, no legible por otros usuarios, de lo contrario podría ser mal utilizado.

Se puede encontrar más información en la página del manual ssh_config(5) .

Si tiene el control de la máquina hasta el punto de que está automatizando tareas en ella, ¿por qué agregar una key a authorized_keys no es una opción?

 ssh-copy-id -i ~/.ssh/foo somehost@example.com 

Entonces no tiene que ingresar una contraseña cada vez que se conecta.

Si el mayor problema es que las conexiones tardan mucho time en conectarse, puede reutilizar una sola connection agregando control master a su configuration de ssh. Deje que se ejecute una connection, y las conexiones posteriores serán casi instantáneas.

 Host * ControlMaster auto ControlPath ~/.ssh/sockets/%r@%h-%p ControlPersist 600 

https://puppetlabs.com/blog/speed-up-ssh-by-reusing-connections

A largo ploop, si está automatizando tareas, probablemente esté mejor utilizando un marco de automation que se encargue de establecer la connection para usted, como:

  • mcollective
  • ansible
  • rundeck