2016-12-30 6 views
3

Мне нужно создать файл functon.txt под конкретным каталогом с hello world в нем в большом количестве машин. Это то, что я делал до сих пор вручную один за другим, регистрируясь в каждом поле и создавая файл. Этот каталог принадлежит root, поэтому я должен убедиться, что новый файл также принадлежит пользователю root.создать файл под каталогом на нескольких машинах через какой-нибудь скрипт?

[email protected]:~$ sudo su 
[sudo] password for david: 
[email protected]:/home/david# cd /opt/Potle/ouyt/wert/1 
[email protected]:/opt/Potle/ouyt/wert/1# vi functon.txt 
[email protected]:/opt/Potle/ouyt/wert/1# ssh [email protected] 

[email protected]:~$ sudo su 
[sudo] password for david: 
[email protected]:/home/david# cd /opt/Potle/ouyt/wert/1 
[email protected]:/opt/Potle/ouyt/wert/1# vi functon.txt 
[email protected]:/opt/Potle/ouyt/wert/1# ssh [email protected] 

..... 

Теперь я должен сделать это примерно в 200 машинах. Есть ли способ сделать это через какой-то скрипт? Я нормально набираю пароли несколько раз, если мне нужно, но я не хочу вручную входить в эти поля и выполнять все остальные шаги вручную.

У меня есть файл hosts.txt, который содержит каждую машину по строкам. Я могу прочитать этот файл по строкам и делать что-то сверх того, но я не уверен, как это сделать?

Это всего лишь одно упражнение для меня, поэтому любой простой или простой способ должен быть в порядке. Я могу даже жестко запрограммировать свой пароль в скрипте для выполнения этой задачи. Каков наилучший способ выполнить эту задачу?

+0

Вы можете решить проблему с помощью Ansible? – helloV

+0

Я думаю, для 'Ansible', я должен установить это на всех машинах правильно? И тогда только это сработает? Верный. –

+0

№ Просто на одной машине. Единственное требование - вы должны быть в состоянии «ssh» от одной машины к другим машинам, – helloV

ответ

2

После установки анзибль:

ansible -i /path/to/hosts.txt -m ping -u david --ask-pass all 

Смотрите, если вы можете свистеть машины успешно. Если это успешно, попробуйте следующее с двумя машинами (создайте еще один файл txt всего за 2 машины и передайте его в -i). Затем вы можете запустить это для всех машин. Если каталог не существует, команда завершится неудачно, и вы увидите итоговые данные об ошибках.

ansible -i /path/to/hosts.txt -m copy -a "src=/path/to/functon.txt dest=/opt/Potle/ouyt/wert/1/functon.txt" -u david --ask-pass --become --become-user root --ask-become-pass all 

Я не тестировал это. Поэтому будьте осторожны.

  • -i: вход узла (ов)
  • -m: модуль
  • -a: аргументы модуля
  • -u: пользователь
  • --ask-pass: Запрос пароля
  • --become пользователя: стать другим пользователем
  • --become-user: новый пользователь
  • --ask-become-pass: Попросите стать пароль
+0

Позвольте мне попробовать. большое спасибо. –

+0

Когда я запустил команду 'ping', которую вы предложили, я получил ошибку на всех машинах. Это ошибка, которую я увидел 'machineC | FAILED => использовать тип соединения 'ssh' с паролями, вы должны установить программу sshpass'. Любая идея, что не так? –

+0

Да, я забыл. Вам нужно 'sshpass', поскольку вы используете пароль вместо ключей. 'sudo apt-get install sshpass' – helloV

1

пользователя Вы можете использовать expect автоматизировать SSH копию/SSH логин:

#!/usr/bin/expect 

set password [lindex $argv 1] 

spawn scp -P 22 [lindex $argv 2] [lindex $argv 0] 

expect "*password:*" 
send -- "$password\r" 
send -- "\r" 

expect eof 

Команда expect будет ждать строки вы даете в аргументы должны быть получены.

Вы можете перебрать хостов из hosts.txt и запустить этот сценарий, как это для каждого из: команды

./create_config.sh [email protected]:/opt/Potle/ouyt/wert/1/ somePassword functon.txt 

Если вы не имеете возможность сделать SSH копию, но только SSH, вы можете отправить с ожидать:

#!/usr/bin/expect 

set password [lindex $argv 1] 

spawn ssh -p 22 [lindex $argv 0] 

expect "*password:*" 
send -- "$password\r" 
send -- "\r" 

# expect the command prompt : change this if needed 
expect "*$*" 

# execute some commands 
send -- "echo 'some text to write to some file' > ~/some_file.txt\r" 

# exit vm 
send -- "exit\r" 

expect eof 

Вы можете запустить с:

./create_config.sh [email protected] somePassword 
0

Вы можете использовать s shfs: монтируйте машину, делайте то, что хотите, размонтируйте и переходите к следующему.