Mặc dù bạn có thể thực hiện việc này trong một phiên ssh duy nhất, nhưng hơi khó để kết hợp sao chép tệp với các lệnh đang chạy.
Cách dễ nhất để giải quyết nhiệm vụ này là chạy các phiên SSH riêng cho ba thao tác:
rsync -a inputs/ machineB:inputs/
ssh machineB 'some command -i inputs -o outputs'
rsync -a machineB:outputs/ outputs/
Điều này đòi hỏi phải xác thực với machineB ba lần. Cách được đề xuất để tránh xác thực nhiều lần là sử dụng tiện ích chia sẻ kết nối trong các phiên bản hiện đại của OpenSSH: bắt đầu kết nối chính với B một lần và mãi mãi, hãy để SSH tự động cõng lên kết nối chính đó. Thêm ControlMaster auto
và một ControlPath
dòng cho bạn~/.ssh/config
, sau đó bắt đầu một kết nối chính trong nền, sau đó thực hiện các nhiệm vụ của bạn.
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/
Thay vì sử dụng scp hoặc rsync để sao chép tệp, có thể dễ dàng hơn để gắn hệ thống tệp từ xa trong SSHFS . Nhân tiện, việc này sẽ đảm nhiệm việc thiết lập kết nối chính (giả sử bạn đã thiết lập kết nối ~/.ssh/config
như đã nêu ở trên).
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