Вы можете scp
файл в нескольких местах в одной команде?
Например:
scp file.txt user@ip-1.com:, user@ip2.com:
Или было бы более практичным создать bash-скрипт, в котором уже есть все хосты, и он просто взял бы файл в качестве аргумента?
Вы можете scp
файл в нескольких местах в одной команде?
Например:
scp file.txt user@ip-1.com:, user@ip2.com:
Или было бы более практичным создать bash-скрипт, в котором уже есть все хосты, и он просто взял бы файл в качестве аргумента?
Допустим, у вас есть файл (destfile.txt
) с user@host
-values, по одному в каждой строке. Тогда вы могли бы сделать так:
for dest in $(<destfile.txt); do
scp ourfile.txt "$dest:remote/path/"
done
или же
while IFS= read -r dest; do
scp ourfile.txt "$dest:remote/path/"
done <destfile.txt
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") \
>( ... )
Вот еще один вариант, с однострочным сценарием оболочки.
cscp.sh 20337.patch < hosts.txt
Он использует два файла, один для цикла и один для списка хостов сервера.
Он читает $1
для первого параметра из CLI как имя файла для SCP
cscp.sh
#!/bin/bash
while read host; do
scp $1 ${host}:
done
HOSTS.TXT
project-prod-web1
project-prod-web2
project-prod-web3
использование
Скопируйте файл на несколько хостов:
cscp.sh file < hosts
Другой альтернативой (и однострочником) было бы вместо этого использовать pdsh для подключения к каждому целевому узлу и инициировать получение оттуда:
pdsh -w^destfile.txt scp hostname:/path/to/file /path/to/destfile
Конечно, для этого требуется еще одна информация (локальный хост) и разные права пользователя, но вы избегаете циклического повторения в bash и использования косвенного обращения для чтения файла.