Bunu tek bir ssh oturumunda yapabilmenize rağmen, dosyaları kopyalamayı çalışan komutlarla birleştirmek biraz zordur.
Bu görevi yerine getirmenin en kolay yolu, üç işlem için ayrı SSH oturumları çalıştırmaktır:
rsync -a inputs/ machineB:inputs/
ssh machineB 'some command -i inputs -o outputs'
rsync -a machineB:outputs/ outputs/
Bunun için machineB'ye üç kez kimlik doğrulaması yapılması gerekir. Birden çok kez kimlik doğrulamasından kaçınmanın önerilen yolu, bağlantı paylaşımı özelliğini OpenSSH'nin modern sürümlerinde kullanmaktır: B'ye bir kez ve herkes için bir ana bağlantı başlatın ve SSH'nin otomatik olarak bu ana bağlantıya geri dönmesine izin verin. Ekranınıza ControlMaster autobir ControlPathsatır ekleyin ve~/.ssh/config ardından arka planda bir ana bağlantı başlatın, ardından görevlerinizi gerçekleştirin.
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/
Dosyaları kopyalamak için scp veya rsync kullanmak yerine, uzak dosya sistemini SSHFS altında bağlamak daha kolay olabilir . Bu arada, bir ana bağlantı kurmaya özen ~/.ssh/configgösterecektir (yukarıda belirtildiği gibi ayarladığınızı varsayarak ).
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