Embora você possa fazer isso dentro de uma única sessão ssh, é um pouco complicado combinar a cópia de arquivos com comandos em execução.
A maneira mais fácil de resolver essa tarefa é executar sessões SSH separadas para as três operações:
rsync -a inputs/ machineB:inputs/
ssh machineB 'some command -i inputs -o outputs'
rsync -a machineB:outputs/ outputs/
Isso requer autenticação para o machineB três vezes. A maneira recomendada de evitar a autenticação várias vezes é usar o recurso de compartilhamento de conexão nas versões modernas do OpenSSH: inicie uma conexão mestra com B de uma vez por todas e deixe o SSH conectar-se automaticamente a essa conexão principal. Adicione ControlMaster auto
e uma ControlPath
linha ao seu ~/.ssh/config
, inicie uma conexão mestre em segundo plano e execute suas tarefas.
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/
Em vez de usar scp ou rsync para copiar arquivos, pode ser mais fácil montar o sistema de arquivos remoto em SSHFS . Isso, por sinal, cuidará da configuração de uma conexão mestre (supondo que você tenha configurado seu ~/.ssh/config
conforme indicado acima).
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 .