У меня более 200 систем Ubuntu, в которые я хочу скопировать файл.
Как я могу скопировать файлы на несколько хостов по сети? Какие у меня есть возможности?
Примечание. Этот вопрос относится к Как удаленно найти версию машины с Ubuntu?
Это может показаться странным направлением, но это сэкономит вам время, когда вы захотите отправить завершение работы, перезагрузку, обновление на все компьютеры.
clusterssh
Давайте установим clusterssh
и запустим команду для подключения ко всем нашим серверам одновременно (это может быть невозможно для 200 одновременно - у меня нет 200 компьютеров для тестирования включите!)
sudo apt-get install clusterssh
cssh user@first_computer:port user@second_computer:port ...
Это приведет к появлению небольших окон вывода для каждого соединения (почему я говорю, что 200 может быть растяжкой) и одного глобального диалога ввода. Оттуда вы можете отправить одну и ту же команду всем своим серверам.
Если вы хотите сделать это из командной строки, и это может поддерживать 200 соединений, вы можете посмотреть флаг -a
для cssh
. Вы можете бросить каждому серверу команду (или строку команд). Он подключится, выполнит и закроет соединение.
cssh -a 'cd directory; ls' user@first_computer:port user@second_computer:port
Вы можете упростить ваши соединения, используя мощную конфигурацию clusterssh
. Откройте man cssh
и пройдите в секцию FILES
. Он объясняет, как вы можете создать файл /etc/clusters
, чтобы позволить вам быстро создавать группы (называемые тегами), например:
clusters = <tag1> <tag2> <tag3>
<tag1> = host1 host2 host3
<tag2> = user@host4 user@host5 host6
<tag3> = <tag1> <tag2>
Затем вы можете сделать:
cssh -T 'tag2' -a 'cd directory; ls'
Я не имею в виду дебо-репо (но это тоже возможно, я думаю), скорее что-то вроде git
или brz
. Это может быть что-то простое, например, веб-сервер или сетевой ресурс. Если пропускная способность сети имеет узкие места, то что-то вроде торрент-сервера может быть даже лучшим курсом (именно так Facebook обновляет все их узлы)
Отсюда это просто соединяя точки. Используя cssh
, вы просто скажете всем своим компьютерам извлечь файл и делать с ним все, что нужно.
Я предлагаю, чтобы даже после того, как вы закончили, вы держите кластер из пары компьютеров для тестирования, прежде чем отправлять вещи в основную группу.
В качестве альтернативы вы можете сохранить его на основе толчка. Самым простым способом для этого является написание сценария, который:
Подключается к серверу и копирует файлы (здесь есть две опции): [ 1113]
sshfs
для локального монтирования удаленной файловой системы, cp
/ rsync
файлы, fusermount -u
каталог, в который вы ее монтировали (для размонтирования удаленной системы). Продолжить. Просто используйте сетевые возможности rsync
для копирования файлов.
rsync /localdir/ user@remote:/remotedir
[Ответ Oli продвинулся, в то время как я вводил]
Альтернатива кластерам параллельна-scp. Это - часть pssh пакета
Необходимо предоставить список хостов в текстовом файле (например, hosts.txt), и затем Вы выходите:
parallel-scp -h hosts.txt file2copy.dat /target/directory
Консультируйтесь со страницей справочника к комплекту Ваши конкретные потребности. Это не должно поражать пределы для слишком многих соединений, так как это не требует для открытия живых соединений со всеми, как cssh делает это попробует это последовательно.
PS: Настраивание основанной на ключе авторизации, конечно, сделает это намного легче, но я подозреваю, что распределение Вашего ключа к 200 системам в 1-м месте могло бы состоять в том, почему Вы задаете этот вопрос...