1

У меня есть файл (скажем, «thisfile.sh», например), который я хотел бы скопировать сразу на несколько серверов (некоторые из которых могут потребовать аутентификацию по паролю) при запуске моего bash-файла, предположительно с помощью SCP. Все адреса серверов записываются по одной строке в текстовом документе, скажем, файл называется "ServerList", например:

firstuser@server.com
seconduser@anotherserver.com
anotheruser@newserver.com
[...]

Как мне этого добиться?

Edit: я думал об этом немного больше, и я все еще хотел бы сделать это с Bash в качестве стартера, я буду использовать альтернативу чуть позже. Как я полагаю, я бы сделал это, используя команду копирования SCP и переменную вместо моего места назначения, что-то вроде этого scp myfile $ Server:~/myfile. Таким образом, я почти уверен, что мне нужно будет использовать какой-то цикл, так что он будет проходить через все строки, пока я копирую его.

3 ответа3

3

Если вы хотите остаться в домене только для bash:

while read server
    scp thisfile.sh $server:/some/location
    ssh $server /some/location/thisfile.sh
done < servers.txt

Это предложит выполнить одну работу за раз, и попросит вас для аутентификации, когда это необходимо

0

Есть несколько способов сделать это. Вы можете использовать что-то вроде ansible или fabric, чтобы написать скрипт, который будет подключаться ко всем вашим компьютерам, копировать на них файл и запускать скрипт. или вы можете написать скрипт bash/shell, чтобы скопировать туда файлы и затем запустить скрипт.

Fabric и Ansible имеют немного более высокую кривую обучения, но могут быть более полезными и могут легко добавить больше компьютеров или изменить скрипт.

Скрипт bash или shell будет легче писать, но его будет сложнее адаптировать, если он понадобится вам в будущем.

https://www.digitalocean.com/community/tutorials/how-to-use-fabric-to-automate-administration-tasks-and-deployments - Fabric

http://docs.ansible.com/ansible/intro_getting_started.html - Ansible

Здесь руководства по тканям и ткани

0

Хотя у Felipe есть лучший ответ для решения только для bash, я думаю, что Ansible намного лучше для этой задачи.

Вам просто нужно поместить все ваши серверы в файл инвентаризации, например так:

[default]
firstserver.com     ansible_ssh_user=firstuser
secondserver.com    ansible_ssh_user=seconduser
thirdserver.com     ansible_ssh_user=thirduser

И пьеса, которая выглядит так:

--- #copyfiles.yml
hosts: all
tasks:
- name: copy file to servers
  copy:
    src: /path/to/local/file
    dest: /path/to/remote/file

А затем запустите:

ansible-playbook -i /path/to/inventory copyfiles.yml --ask-pass

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .