Хотя вы можете сделать это внутри одного сеанса SSH, немного сложнее объединить копирование файлов с запущенными командами.
Самый простой способ решить эту задачу - запустить отдельные сеансы SSH для трех операций:
rsync -a inputs/ machineB:inputs/
ssh machineB 'some command -i inputs -o outputs'
rsync -a machineB:outputs/ outputs/
Это требует аутентификации на machineB три раза. Рекомендованный способ избежать многократной аутентификации - это использовать средство совместного использования соединений в современных версиях OpenSSH: запустить главное соединение с B раз и навсегда и автоматически подключить SSH к этому главному соединению. Добавьте ControlMaster auto
и ControlPath
строку к вашему~/.ssh/config
, затем запустите мастер-соединение в фоновом режиме, затем выполните свои задачи.
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/
Вместо того, чтобы использовать scp или rsync для копирования файлов, может быть проще смонтировать удаленную файловую систему под SSHFS . Между прочим, это позаботится о настройке мастер-соединения (при условии, что вы настроили ~/.ssh/config
как указано выше).
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