Embora você possa fazer isso em uma única sessão ssh, é um pouco complicado combinar a cópia de arquivos com os comandos em execução.
A maneira mais fácil de executar 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 no 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 mestre com o B de uma vez por todas e permita que o SSH ative automaticamente essa conexão mestre. Adicione ControlMaster auto
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 no SSHFS . A propósito, você cuidará da configuração de uma conexão mestre (assumindo que você configurou a sua ~/.ssh/config
como 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 .
cat file | ssh user@host 'cat > /destination/of/file; /path/to/script &>/dev/null; cat results' > /destination/of/results