scp một tập tin duy nhất đến nhiều địa điểm


28

Bạn có thể scpmột tập tin đến nhiều vị trí trong cùng một lệnh không?

Ví dụ:

scp file.txt user@ip-1.com:, user@ip2.com:

Hoặc sẽ thực tế hơn khi tạo một tập lệnh bash có tất cả các máy chủ lưu trữ trong đó và nó sẽ chỉ lấy một tệp làm đối số?

Câu trả lời:


24

Giả sử bạn có một tệp ( destfile.txt) có giá user@hosttrị, mỗi tệp trên mỗi dòng. Sau đó, bạn có thể làm như thế này:

while IFS= read -r dest; do
  scp ourfile.txt "$dest:remote/path/"
done <destfile.txt

Những công việc này! Vẫn còn một số ít để loại ra mặc dù. Có lẽ có một cách để đơn giản hóa điều đó.
Andrew

2
@Andrew, nếu bạn thay đổi for-loop thành while read dest; do, nó sẽ đọc từ đầu vào tiêu chuẩn. Đặt nó trong một tập lệnh và đưa dữ liệu destfile.txtvào đó (ví dụ ./thescript.sh <destfile.txt:).
Kusalananda

Tôi đang làm trước đây, nhưng với rsync và một số nút của tôi không cập nhật. Bất cứ ý tưởng tại sao?
Soubriquet

7

Trông giống như một công việc cho song song scp (n) (t) - điều này thực hiện một tập hợp các lệnh cho phép các lệnh scp được chạy trên nhiều hệ thống cùng một lúc. Nó sẽ cho phép sao chép các tệp song song với một bộ máy.


4
cat file.txt | tee >(ssh user@ip1.com "cat > file.txt") \
                   >(ssh user@ip2.com "cat > file.txt")

tar cz file1 file2 file3 | tee >(ssh user@ip1.com "tar xz") \
                               >( ... )

0

Một cách khác (và một lớp lót) sẽ thay vào đó là sử dụng pdsh để kết nối với từng nút mục tiêu và kích hoạt một get từ đó:

pdsh -w^destfile.txt scp hostname:/path/to/file /path/to/destfile

Điều này tất nhiên đòi hỏi thêm một thông tin (máy chủ lưu trữ cục bộ) và các quyền người dùng khác nhau, nhưng bạn tránh vòng lặp trong bash và sử dụng cảm ứng để đọc tệp.


0

Đây là một tùy chọn khác, với tập lệnh shell một dòng.

cscp.sh 20337.patch < hosts.txt

Nó sử dụng hai tệp, một cho vòng lặp và một cho danh sách máy chủ lưu trữ. Nó đọc $1tham số đầu tiên từ CLI làm tên tệp cho SCP

cscp.sh

#!/bin/bash
while read host; do
  scp $1 ${host}:
done

hosts.txt

project-prod-web1
project-prod-web2
project-prod-web3

Sử dụng

Sao chép tập tin vào nhiều máy chủ:

cscp.sh file < hosts

0

Nếu bạn có một quy ước đặt tên nhất quán đang diễn ra cho nhiều máy chủ, bạn có thể làm một cái gì đó gọn gàng như:

for x in st1-abc-{11..20}.acme.com; do scp filez.tgz user@$x; done
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.