Указываем местный сервер времени для alt linux

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 865
Стаж: 5 лет 9 месяцев
Откуда: Вологодская область
Поблагодарили: 39 раз
Контактная информация:

Указываем местный сервер времени для alt linux

Сообщение Артём Мамзиков »

Наиболее правильный скрипт, если не доступен хост переходит дальше так как цикл выведен из expect
vrem.sh
Показать
#!/bin/bash

# Переменные логина пароля
USER=root
PASS=Пароль

# Переменные IP для перебора подсетей
ip="121"
for c in $ip
do

for (( i=100; i <= 240; i++ ))
do

/usr/bin/expect<<EOF

# spawn - вызов программы
# expect - ожидание вывода запущенной программой строки (дословно: ожидаем, что "скажет" выполняемая программа);
# send - передача данных или команд в вызванную программу (выполняется так, как будто вы сами набираете команды в консоли)
# close - завершение сценария

# Время ожидания
set timeout 2
# Подключаемся по ssh
spawn ssh -p 22 $USER@192.168.$c.$i
# Если выходит запрос потверждаем yes
expect {
"(yes/no)?*" {
send "yes\r"
}
}
# Ждем строку запроса пароля password:
expect "word:"
# Водим пароль
send "$PASS\r"
# Ждем строку для ввода команд от root #
expect "#*"
expect "#*"
# Прописываем сервер обновления времени в конфиг
send "echo server 192.168.101.8 >> /etc/ntpd.conf\r"
# Ждем строку для ввода команд от root #
expect "#*"
# Добавить в автозагрузку службу ntpd
send "systemctl enable ntpd\r"
# Ждем строку для ввода команд от root #
expect "#*"
# Запускаем службу
send "service ntpd start\r"
# Ждем строку для ввода команд от root
expect "#*"
# Обновим время с сервера
send "ntpdate 192.168.121.9\r"
# Ждем строку для ввода команд от root #
expect "#*"
# Выполняем выход из сеанса
send "exit\r"
expect eof
EOF

done
done

Второй вариант при не доступности или каких то ошибках скрипт завершается и не перебирает дальше
vrem2.sh
Показать
#!/usr/bin/expect -f

# spawn - вызов программы
# expect - ожидание вывода запущенной программой строки (дословно: ожидаем, что "скажет" выполняемая программа);
# send - передача данных или команд в вызванную программу (выполняется так, как будто вы сами набираете команды в консоли)
# close - завершение сценария

# Время ожидания
set timeout 2
# Переменные логина пароля
set USER "root"
set PASS "Пароль"

# Перебор подсетей циклом
for {set a 168} {$a <= 400} {incr a} {
# Подключаемся по ssh
spawn ssh $USER@192.168.121.$a
# Если ip не доступен или отказ в подключении
set timeout 5
expect {
"*No route to host*" {set NOHOST "0"}
"*Connection refused*" {set NOHOST "0"}
# Если доступен
"(yes/no)?*" {set NOHOST "1"}
"word:" {set NOHOST "1"}
}
# Разделение вариантов выполнения от ответа
if {$NOHOST == 0} {
send "echo $a >> lognohost.txt"
expect eof
} else {
# Если выходит запрос потверждаем yes
expect "*(yes/no)?*" {send "yes\r"}
# Ждем строку запроса пароля password:
expect "password:"
# Водим пароль
send "$PASS\r"
# Ждем строку для ввода команд от root #
expect "#*"
expect "#*"
# Прописываем сервер обновления времени в конфиг
# send "echo server 192.168.121.9 >> /etc/ntpd.conf\r"
# Ждем строку для ввода команд от root #
# expect "#*"
# Добавить в автозагрузку службу ntpd
send "systemctl enable ntpd\r"
# Ждем строку для ввода команд от root #
expect "#*"
# Запускаем службу
send "service ntpd start\r"
# Ждем строку для ввода команд от root
expect "#*"
# Обновим время с сервера
send "ntpdate 192.168.121.9\r"
# Ждем строку для ввода команд от root #
expect "#*"
# Выполняем выход из сеанса
send "exit\r"
}}
expect eof
Первый тестовый встает если Ip не доступен или при другой ошибке, если все ок выполняется полностью
test-vrem.sh
Показать
#!/usr/bin/expect -f

set timeout 2
set USER "root"
set PASS "Пароль"

for {set a 101} {$a <= 250} {incr a} {
spawn ssh $USER@192.168.10.$a
expect {
"(yes/no)?*" {
send "yes\r"
}
}
# Ждем строку для ввода команд от root #
expect "#*"
expect "#*"
# Прописываем сервер обновления времени в конфиг
# send "echo server 192.168.121.9 >> /etc/ntpd.conf\r"
# Ждем строку для ввода команд от root #
# expect "#*"
# Добавить в автозагрузку службу ntpd
send "systemctl enable ntpd\r"
# Ждем строку для ввода команд от root #
expect "#*"
# Запускаем службу
send "service ntpd start\r"
# Ждем строку для ввода команд от root
expect "#*"
# Обновим время с сервера
send "ntpdate 192.168.121.9\r"
# Ждем строку для ввода команд от root #
expect "#*"
# Выполняем выход из сеанса
send "exit\r"
expect eof
}
Время
timedatectl set-timezone Europe/Moscow
ntpdate 192.168.121.9
/usr/sbin/ntpdate -u 192.168.121.9 && /usr/sbin/hwclock --systohc

Первый ответ
20 Jul 11:54:26 ntpdate[10380]: step time server 192.168.121.9 offset 262.066658 sec сервер времени шага 192.168.121.9 смещение 262.066658 сек
Если еще раз второй ответ
20 Jul 12:00:30 ntpdate[10567]: adjust time server 192.168.121.9 offset 0.014106 sec настройка времени сервера 192.168.121.9 смещение 0.014106 сек

Указать сервера обновление времени в nano /etc/ntpd.conf
echo server 192.168.121.9 >> /etc/ntpd.conf

Запущена ли служба проверка
chkconfig --list ntpd
systemctl status ntpd
ps -aux|egrep ntpd

Если нет то добовляем в автозагрузку варианты команд возможно нужно дать права на файл
chkconfig --add ntpd
chkconfig --levels 35 ntpd on
chkconfig ntpd on
systemctl enable ntpd
update-rc.d ntpd defaults

Запуск сервиса вручную
/etc/init.d/ntpd start
service ntpd start

Проверка date

Скриптом
echo -e '
#!/bin/sh
timeout 15 /usr/sbin/ntpdate -u 192.168.121.9 && /usr/sbin/hwclock --systohc
exit 0
' > /home/kudate.sh && chmod +x /home/godomain.sh

# служба
{
echo '[Unit]'
echo 'Description=kudate'
echo 'After=multi-user.target'
echo '[Service]'
echo 'Type=simple'
echo 'ExecStart=/bin/bash /home/kudate.sh'
echo '[Install]'
echo 'WantedBy=multi-user.target'
} > /lib/systemd/system/kudate.service && /bin/systemctl enable kudate


Еще примеры со скриптом expect
Установка OCS Agent на Debian9 Proxmox автоматом
Выход Из Учетной записи Linux (завершение сеанса) Скрипт
количество слов: 509

Вернуться в «Linux»