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:
rsync -a inputs/ machineB:inputs/
ssh machineB 'some command -i inputs -o outputs'
rsync -a machineB:outputs/ outputs/
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 una ControlPath
línea a su~/.ssh/config
, luego inicie una conexión maestra en segundo plano, luego realice sus tareas.
ssh -fN machineB # start a master connection in the background
# Subsequent connections will be slaves to the existing master connection
rsync -a inputs/ machineB:inputs/
ssh machineB 'some command -i inputs -o outputs'
rsync -a machineB:outputs/ outputs/
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).
mkdir /net/machineB
sshfs machineB: /net/machineB
cp -Rp inputs /net/machineB/
ssh machibeB 'some command -i inputs -o outputs'
cp -Rp /net/machineB/outputs .
cat file | ssh user@host 'cat > /destination/of/file; /path/to/script &>/dev/null; cat results' > /destination/of/results