¿Es posible escribir un script bash, que
- se iniciaría desde la máquina A, iniciará sesión en una máquina B diferente mediante ssh (ambas máquinas A y B serían máquinas Linux),
- copia algunos archivos en la máquina B
- ejecuta una secuencia de comandos de Python en estas máquinas.
- transfiere los resultados a la máquina A
- se desconecta de la máquina B.
¿Es esto técnicamente factible?
bash
ssh
shell-script
Aufwind
fuente
fuente
cat file | ssh user@host 'cat > /destination/of/file; /path/to/script &>/dev/null; cat results' > /destination/of/results
ControlMaster=yes
yControlPath=/path/to/socketfile
, y luego iniciar una conexión ssh con-f
para ejecutar un ssh en segundo plano. Indique a todas las conexiones SSH posteriores que usen el mismo archivo de socket.Es posible hacer todo en una sola
ssh
conexión / sesión:Esto:
local_src
aremote_dst
,command
,remote_src
alocal_dst
.Pero si
command
sigue escribiendostdout
, el resultado también estará enlocal_dst
. Sicommand
lee la entrada destdin
, recibirá yEOF
.fuente
Si bien puede hacer esto dentro de una sola sesión ssh, es un poco complicado combinar la copia de archivos con los comandos en ejecución.
La forma más fácil de abordar esta tarea es ejecutar sesiones SSH separadas para las tres operaciones:
Esto requiere autenticarse en la máquina B tres veces. La forma recomendada de evitar la autenticación varias veces es usar la función de uso compartido de conexiones en las versiones modernas de OpenSSH: inicie una conexión maestra a B de una vez por todas y deje que SSH se conecte automáticamente a esa conexión maestra. Agregue
ControlMaster auto
y unaControlPath
línea a su~/.ssh/config
, luego inicie una conexión maestra en segundo plano, luego realice sus tareas.En lugar de usar scp o rsync para copiar archivos, puede ser más fácil montar el sistema de archivos remoto en SSHFS . Esto se encargará de configurar una conexión maestra, por cierto (suponiendo que haya configurado su
~/.ssh/config
como se indicó anteriormente).fuente