Хоча ви можете це робити протягом одного сеансу 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