Фон: Я должен скопировать файл с одного сервера к более чем 100 серверам в тестовой среде. после того как файл копируется, он требует, чтобы иметь полномочия на файле, изменился/проверил. Это все серверы Linux. у большинства из них есть тот же пароль для входа в систему, но некоторые не могут.
Я нуждаюсь в помощи с созданием цикла в моем сценарии удара. Это на самом деле обращается, Ожидают. Область, которую я хочу сделать 'лучше' или зафиксировать, несколько вещей
Я пытался записать часть пароля, думая, что это - цикл, но я не действительно уверен, является ли тот метод взглядов соглашением. Я пытался просто добавить, что другой "ожидает Пароль": думая, что, если это получает подсказку во второй раз, для выхода, но мне пришлось нелегко с тем, чтобы заставлять это работать.Спасибо!
#!/bin/bash
while read ip; do
sleep 2
expect <<- DONE
set timeout 1
spawn scp yoman.txt root@$ip:/felixtemp
if above command fails, dump the IP to fail.txt, otherwise continue
expect yes/no { send yes\r }
expect Password: { send aaaaaa\r } #if this is good, continue the script from *****
else #exit the script
expect Password: { send 033\r }
expect # { send "echo 'password failed'\r" }
&& dump to a text file called fail.txt
***** expect # { send "exit\r\r" }
sleep 1
set timeout 1
spawn ssh root@$ip
sleep 2
expect yes/no { send yes\r }
sleep 2
expect Password: { send aaaaaa\r }
sleep 5
expect # { send "cd /felixtemp\r" }
expect # { send "chown informix:informix yoman.txt\r" }
expect # { send "chmod 775 yoman.txt\r" }
expect # { send "sum yoman.txt | grep 10350 && echo 'transfer good' || echo 'transfer bad'\r" }
expect # { send exit\r }
sleep 1
DONE
done < ip.txt
ನೀವು ನೂರಾರು ಲಿನಕ್ಸ್ ಸರ್ವರ್ಗಳನ್ನು ನಿರ್ವಹಿಸಬೇಕಾದರೆ ಈ ಕಾರ್ಯಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ನೀವು ಸಂರಚನಾ ನಿರ್ವಹಣಾ ಸಾಧನವನ್ನು ಬಳಸಬೇಕು. ತುಂಬಾ ಸರಳವಾದ ಸಂರಚನಾ ನಿರ್ವಹಣಾ ಸಾಧನವು ಉತ್ತರಿಸಬಲ್ಲದು,ನಿರ್ವಹಿಸಲಾದ ವ್ಯವಸ್ಥೆಯ ಏಕೈಕ ಅವಶ್ಯಕತೆ ಪೈಥಾನ್ 2.4 ಅಥವಾ ಹೆಚ್ಚಿನದು ( http://docs.ansible.com/intro_installation.html#managed-node-requirements ).
ನಿಮ್ಮ ಸಮಸ್ಯೆಯನ್ನು ಉತ್ತರಿಸಬಹುದಾದ ರೀತಿಯಲ್ಲಿ ಪರಿಹರಿಸಲಾಗಿದೆ:
1) ನೀವು ಎಲ್ಲಾ ಹೋಸ್ಟ್ಗಳಿಗೆ ಡೀಫಾಲ್ಟ್ ಪಾಸ್ವರ್ಡ್ ಮತ್ತು ಕೆಲವು ಹೋಸ್ಟ್ಗಳಿಗೆ ಇತರ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಬಹುದಾದ ಹೋಸ್ಟ್ಗಳ ಪಟ್ಟಿಯನ್ನು ವಿವರಿಸಿ
[hosts_list]
172.17.0.101 ansible_ssh_user=root ansible_ssh_pass=password
172.17.0.102 ansible_ssh_user=root ansible_ssh_pass=oldpassword
172.17.0.103
172.17.0.104
[hosts_list:vars]
ansible_ssh_user=root ansible_ssh_pass=default_password
2) ನೀವು ನಿರ್ವಹಿಸಿದ ನೋಡ್ಗಳಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳಿಸಲು ಬಯಸುವ ಕಾರ್ಯಗಳನ್ನು ಒಳಗೊಂಡಿರುವ ಸರಳ ಪ್ಲೇಬುಕ್ ಅನ್ನು ವಿವರಿಸಿ
root@node1:~# cat play.yoman
---
- hosts: hosts_list
tasks:
- name: "Build hosts file"
copy: src=/root/yoman.txt dest=/tmp/felixtemp owner=user group=adm mode=0755
3) ಪ್ಲೇಬುಕ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಿ ಮತ್ತು ಫಲಿತಾಂಶವನ್ನು ಪರಿಶೀಲಿಸಿ
root@node1:~# ansible-playbook -i hosts_list play.yoman
PLAY [hosts_list] *************************************************************
GATHERING FACTS ***************************************************************
fatal: [172.17.0.104] => SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue
fatal: [172.17.0.103] => SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue
ok: [172.17.0.101]
fatal: [172.17.0.102] => Authentication failure.
TASK: [Build hosts file] ******************************************************
ok: [172.17.0.101]
PLAY RECAP ********************************************************************
to retry, use: --limit @/root/play.yoman.retry
172.17.0.101 : ok=2 changed=0 unreachable=0 failed=0
172.17.0.102 : ok=0 changed=0 unreachable=1 failed=0
172.17.0.103 : ok=0 changed=0 unreachable=1 failed=0
172.17.0.104 : ok=0 changed=0 unreachable=1 failed=0
ಕಾರ್ಯವು ಕಾರ್ಯಗತಗೊಳಿಸಿದ ಸರ್ವರ್ನ ಪಟ್ಟಿಯನ್ನು ಮತ್ತು ಕಾರ್ಯವು ವಿಫಲವಾದ ಸರ್ವರ್ಗಳ ಪಟ್ಟಿಯನ್ನು ನೀವು ಪಡೆಯುತ್ತೀರಿ (ತಲುಪಲಾಗದ ಸರ್ವರ್ ಅಥವಾ ತಪ್ಪು ಪಾಸ್ವರ್ಡ್). ಫೈಲ್, ಅದರ ಅನುಮತಿ ಮತ್ತು ವಿಷಯವನ್ನು ಬದಲಾಯಿಸದ ಸರ್ವರ್ನ ಉಪವಿಭಾಗವನ್ನು ಸಹ ನೀವು ಪಡೆದುಕೊಳ್ಳುತ್ತೀರಿ ಏಕೆಂದರೆ ಅವುಗಳು ಈಗಾಗಲೇ ನವೀಕರಿಸಲ್ಪಟ್ಟಿವೆ
Почему не вы используете sshpass
?
Цикл с таблицей:
tab=(
1.2.3.4
4.3.2.1
...
);
for (( i = 1; i < ${#tab[*]}; i++ )) {
echo ${tab[i]};
...
}
Вам потребуются некоторые условия для определенных IP-адресов, чтобы установить правильный пароль.
SCP
sshpass -p $PASSWORD scp -o StrictHostKeyChecking=no $FILE $USER@$HOST:$PATH
Согласно manpage возвращаемые значения:
0 Успех
1 Неверный аргумент командной строки
2 Указаны конфликтующие аргументы
3 Общая ошибка времени выполнения
4 Нераспознанный ответ от ssh (ошибка синтаксического анализа)
5 Неверный / неверный пароль
6 Открытый ключ хоста неизвестен. sshpass завершает работу без подтверждения новый ключ.
Полезно, если вы хотите вывести $ HOST в файл с возвращаемым значением:
sshpass -p $PASSWORD scp -o StrictHostKeyChecking=no $FILE $USER@$HOST:$PATH
if [ $? -ne 0 ]
then
echo $HOST:$? >> file.txt;
fi
SSH
Для отправки команд:
sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no $USER@$HOST $CMD
Ни один из предыдущих комментариев не использовался внутри сценария bash, как спрашивал ОП.
Недавно мне нужно было выполнить аналогичную задачу, поэтому вот мое решение с использованием ожидания:
expect <<- DONE
set timeout 1
spawn scp yoman.txt root@${ip}:/felixtemp
while 1 {
expect {
"no)?" {
send "yes\n"
}
"denied" {
log_file fail.txt
send_log "Couldn't log in to ${ip}.\n";
exit 1
}
"assword:" {
send "${password}\n"
}
"100%" {
break;
}
}
}
expect eof
DONE
Объяснение синтаксиса ожидания: