Linux Workstation autodeploy script (скрипт автоматического развертывания рабочих станций)

Наверное каждого системного администратора рано или поздно посещает идея написать скрипт автоматической настройки рабочих станций и серверов, причем вне зависимости от того какой вы администратор Windows или Linux и если такая идея вам пришла в голову, то значит вы дозрели. Без шуток, идея просто отличная и требует обязательного воплощения! Давайте сразу же начнем его и разрабатывать.

 
 
Логотип GITA-DEV

Автор: Черноусов Антон aka Gita-Dev
Опубликовано: 17 Авг 2018 (последние правки 3 месяца)

agent apt apt-get aptitude debian dev email install mta release smtp tar ubuntu zabbix авторизация

1. Устанавливаем базовый набор софта

# apt-get update
# apt-get upgrade
# apt-get install -y aptitude mc software-properties-common ssh

2. Отключаем вход пользователя root по паролю, но оставляем авторизацию по ключу и естественно устанавливаем наш открытый ключ. Часть функционала отключаемая и настройки управляются параметрами конфигурационного файла.

# Авторизация по SSH
RSA_PUBLIC_KEY="ssh-rsa AAAPPP...3SafNV root@workstation"
DISABLE_ROOT_SSH_LOGIN=True
DEFINE_ROOT_DESCRIPTION_AS_HOSTNAME=True

# Обработка настроек SSH
key_exist=`cat /root/.ssh/authorized_keys | grep "$RSA_PUBLIC_KEY"`
if [ -z "$key_exist" ];
then
    # Устанавливаем публичный ключ (если он не установлен)
    mkdir -p /root/.ssh
    echo "$RSA_PUBLIC_KEY" >> /root/.ssh/authorized_keys
    chmod 600 /root/.ssh/authorized_keys
fi

# Запрещаем парольный вход пользователя root
if [ "$DISABLE_ROOT_SSH_LOGIN" = "True" ];
then
    # Delete PermitRootLogin
    sed -i '/PermitRootLogin/d' /etc/ssh/sshd_config
    # Define PermitRootLogin
    echo "PermitRootLogin prohibit-password" >> /etc/ssh/sshd_config
fi

# Устанавливаем HOSTNAME в качестве описания пользователя root
if [ "$DEFINE_ROOT_DESCRIPTION_AS_HOSTNAME" = "True" ];
then
    sed -i '/root:x:0:0:/d' /etc/passwd
    sed -i "1s/^/root:x:0:0:root-${HOSTNAME}:\/root:\/bin\/bash\n/" /etc/passwd
fi

3. Настройка локального MTA для отправки отчетов через Yandex-почту.

Это нам потребуется для отправки ежедневных отчетов Logwatch

# Настройка локального MTA
SETUP_LOCAL_MTA=True
AUTH_LOGIN="robot-report@dvi.net"
AUTH_PASSWORD="xxxSecretPasswordxxx"
SMTP_HOST="smtp.yandex.ru"
AUTH_DOMAIN=`echo "$AUTH_LOGIN" | awk -F"@" '{print $2}'`

# Настройка локального MTA
if [ "$SETUP_LOCAL_MTA" = "True" ];
then
    #DEBIAN_FRONTEND=noninteractive apt-get -yq install postfix
    #apt-get install -y mailutils
    rm -R /etc/postfix/private
    mkdir /etc/postfix/private
    echo "@$AUTH_DOMAIN $AUTH_LOGIN" > /etc/postfix/private/canonical
    echo "@$AUTH_DOMAIN $SMTP_HOST" > /etc/postfix/private/sender_relay
    echo "[$SMTP_HOST]  $AUTH_LOGIN:$AUTH_PASSWORD" > /etc/postfix/private/sasl_passwd
    postmap /etc/postfix/private/*
    echo "relayhost =" > /etc/postfix/main.cf
    echo "smtp_sasl_auth_enable = yes" >> /etc/postfix/main.cf
    echo "smtp_sasl_password_maps = hash:/etc/postfix/private/sasl_passwd" >> /etc/postfix/main.cf
    echo "smtp_sasl_security_options = noanonymous" >> /etc/postfix/main.cf
    echo "smtp_sasl_type = cyrus" >> /etc/postfix/main.cf
    echo "smtp_sasl_mechanism_filter = login" >> /etc/postfix/main.cf
    echo "smtp_sender_dependent_authentication = yes" >> /etc/postfix/main.cf
    echo "sender_dependent_relayhost_maps = hash:/etc/postfix/private/sender_relay" >> /etc/postfix/main.cf
    echo "sender_canonical_maps = hash:/etc/postfix/private/canonical" >> /etc/postfix/main.cf
    echo "compatibility_level=2" >> /etc/postfix/main.cf
    echo "append_dot_mydomain=yes" >> /etc/postfix/main.cf
    echo "smtputf8_enable = no" >> /etc/postfix/main.cf
    /etc/init.d/postfix restart
fi

4. Настройка мониторинга датчиков температуры и поверхности жесткого диска (для ежедневных отчетов LogWatch):

# Мониторинг поверхности HDD и датчиков lm-sensors и отправка отчетов 
INSTALL_HARDWARE_MONITORING_TOOLS=True

# Настройка мониторинга оборудования 
if [ "$INSTALL_HARDWARE_MONITORING_TOOLS" = "True" ]; 
then 
   apt-get install -y lm-sensors 
   apt-get install -y smartmontools 
   (while :; do echo ""; done ) | sensors-detect 
fi

5. Автоматическая отправка ежедневных отчетов Logwatch

# Отправка ежедневных отчетов Logwatch 
REPORT_EMAIL="reports@giga.net" 
ENABLE_LOGWATCH=True

# Настройка отправки отчетов Logwatch 
if [ "$ENABLE_LOGWATCH" = "True" ]; 
then 
   apt-get install -y logwatch 
   echo "#!/bin/bash" > /etc/cron.daily/00logwatch 
   echo "test -x /usr/share/logwatch/scripts/logwatch.pl || exit 0" >> /etc/cron.daily/00logwatch 
   echo "/usr/sbin/logwatch --mailto $REPORT_EMAIL" >> /etc/cron.daily/00logwatch 
fi

6. Установка проприетарного ПО

Скачиваем бинарные пакеты с официальных сайтов 

# Установка проприетарного ПО
INSTALL_SKYPE=True
INSTALL_TEAM_VIEWER=True
INSTALL_CHROME=True

# Установка проприетарного ПО
if [ "$INSTALL_SKYPE" = "True" ];
then
  apt-get install gconf-service gconf-service-backend gconf2-common libgconf-2-4
  wget https://repo.skype.com/latest/skypeforlinux-64.deb -O /tmp/skypeforlinux-64.deb
  dpkg -i /tmp/skypeforlinux-64.deb
fi

if [ "$INSTALL_TEAM_VIEWER" = "True" ];
then
  wget https://download.teamviewer.com/download/linux/teamviewer_amd64.deb -O /tmp/teamviewer_amd64.deb
  dpkg -i /tmp/teamviewer_amd64.deb
fi

if [ "$INSTALL_CHROME" = "True" ];
then
  wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -O /tmp/google-chrome-stable_current_amd64.deb
  dpkg -i /tmp/google-chrome-stable_current_amd64.deb
fi

7. Отправка сообщений при обнаружении ошибок в SMART

Хоть это и простые рабочие станции, но прозевать сбой HDD с потерей данных пользователя сильно не хочется

ENABLE_SMARTMON=True

if [ "$ENABLE_SMARTMON" = "True" ]; 
then 
   echo "DEVICESCAN -d removable -n standby -m $REPORT_EMAIL -M exec /usr/share/smartmontools/smartd-runner" > /etc/smartd.conf 
   systemctl restart smartd 
fi

8. Автоматическая установка настройка Zabbix

# Установка и конфигурация Zabbix-агента 
INSTALL_ZABBIX=True 
ZABBIX_SERVER="10.54.254.88"

if [ "$INSTALL_ZABBIX" = "True" ]; 
then 
   wget http://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+xenial_all.deb -O /tmp/zabbix.deb 
   dpkg -i /tmp/zabbix.deb 
   apt-get update 
   apt-get install zabbix-agent zabbix-get 
 
   echo "PidFile=/var/run/zabbix/zabbix_agentd.pid" > /etc/zabbix/zabbix_agentd.conf 
   echo "LogFile=/var/log/zabbix/zabbix_agentd.log" >> /etc/zabbix/zabbix_agentd.conf 
   echo "LogFileSize=0" >> /etc/zabbix/zabbix_agentd.conf 
   echo "Server=$ZABBIX_SERVER, 127.0.0.1" >> /etc/zabbix/zabbix_agentd.conf 
   echo "ServerActive=$ZABBIX_SERVER" >> /etc/zabbix/zabbix_agentd.conf 
   echo "Hostname=${HOSTNAME}" >> /etc/zabbix/zabbix_agentd.conf 
   echo "Include=/etc/zabbix/zabbix_agentd.d/*.conf" >> /etc/zabbix/zabbix_agentd.conf 
 
   systemctl restart zabbix-agent 
fi

9. Финальные штрихи

# Fix broken 
apt --fix-broken install 
# Remove old packages 
apt autoremove

В общих чертах это так и выглядит и вам конечно надо кастомить этот скрипт для конкретно своего случая.

Похожие статьи

Полноценный ввод рабочей станции Ubuntu Linux в Windows-домен

Полноценный ввод рабочей станции Ubuntu Linux в Windows-домен

Рабочая станция или сервер под управлением Linux-дистрибутива в Windows домене, миф или реальность? Давно уже не только реальность, а еще и достаточно типовая задача решаемая при помощи пошаговой инструкции, а если ее переложить в виде скрипта, то ввод в домен будет не сложнее чем при использовании родных утилит Windows. Так как последние версии Samba позволяют вводить рабочую станцию или сервер под управлением OS Linux в домен Windows практически без "танцев с бубном", мы проработали подробный план по вводу в домен для систем на базе Ubuntu Linux. Данная инструкция была многократно протестирована в различных доменах.


Автоматическое обновление DNS-записи рабочей станции Linux при вводе в DNS-домен (No DNS domain configured for computer. Unable to perform DNS Update)

Автоматическое обновление DNS-записи рабочей станции Linux при вводе в DNS-домен (No DNS domain configured for computer. Unable to perform DNS Update)

После выхода Samba 4 ввести рабочую станцию под управлением Linux в Windows домен стало гораздо проще, но все еще переодически всплывают нестандартные ситации такие как ошибка No DNS domain configured for computer. Unable to perform DNS Update.


Сканирование локальной сети и поиск рабочих станций (практический пример)

Сканирование локальной сети и поиск рабочих станций (практический пример)

Сегодня мы будем удаленно искать потерянные рабочие станции на филиале. Поступила типовая задачка провести инвентаризацию рабочих станций, но как обычно старые записи не соответствуют действительности и многое поменялось, поэтому надо начинать с банального сканирования сети и поиска рабочих станций.


Отзывы и комментарии