802.1x_domain_reconnect.sh
скрипт, он учитывает особенности работы 802.1х при повторном вводе в домен. v1.0
This commit is contained in:
@@ -0,0 +1,166 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#version 1.0
|
||||||
|
|
||||||
|
# Цвета для вывода в консоль
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
version="1.0"
|
||||||
|
if [ $# -eq 1 ]; then
|
||||||
|
if [[ "$1" == "-v" ]]; then
|
||||||
|
echo "$version"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
LOG_FILE="/var/log/comp_settings.log"
|
||||||
|
log_message() {
|
||||||
|
local message="$1"
|
||||||
|
printf '%s - %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$message" >> "$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$(id -u)" != "0" ]; then
|
||||||
|
log_message "Попытка запуска без прав суперпользователя (root) (user: $(whoami))"
|
||||||
|
echo -e "${RED} Ошибка - недостаточно прав"
|
||||||
|
echo "Необходимо запустить из под пользователя 'root'"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -f /etc/krb5.keytab ]]; then
|
||||||
|
echo -e "${YELLOW}Внимание: АРМ уже находится в домене.${NC}"
|
||||||
|
read -r -p "Вывести из домена и выполнить очистку? (введите yes для подтверждения): " answer
|
||||||
|
if [[ "$answer" == "yes" ]]; then
|
||||||
|
echo "Выполняется вывод из домена и очистка..."
|
||||||
|
log_message "Пользователь подтвердил вывод из домена"
|
||||||
|
|
||||||
|
# --- БЛОК ОЧИСТКИ ---
|
||||||
|
systemctl stop puppet
|
||||||
|
realm leave
|
||||||
|
sss_cache -E
|
||||||
|
/opt/config/ad_setup.sh > /dev/null
|
||||||
|
getcert stop-tracking -i $(hostname)
|
||||||
|
rm -rf /opt/certs/802.1x/*
|
||||||
|
rm -rf /opt/puppetlabs/puppet/cache/*
|
||||||
|
rm -rf /etc/puppetlabs/puppet/ssl
|
||||||
|
|
||||||
|
echo -e "${GREEN}Успешно: АРМ выведен из домена, очистка выполнена.${NC}"
|
||||||
|
log_message "Вывод из домена и очистка выполнены успешно"
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
echo "Операция отменена. АРМ остается в домене."
|
||||||
|
log_message "Отмена вывода из домена пользователем"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_message "Запускаем повторный ввод в домен"
|
||||||
|
domain=$(awk '/^search/{print $2}' /etc/resolv.conf)
|
||||||
|
if [[ -z "$domain" ]]; then
|
||||||
|
echo -e "${RED}Ошибка: Не удалось определить домен из /etc/resolv.conf (отсутствует строка search)${NC}" >&2
|
||||||
|
log_message "Домен не определен в resolv.conf"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
read -r -p "Имя АРМ (короткое без домена): " hostname
|
||||||
|
read -r -p "Имя пользователя для ввода в домен: " username
|
||||||
|
hostname=$(echo "$hostname" | xargs)
|
||||||
|
username=$(echo "$username" | xargs)
|
||||||
|
fqdn="${hostname}.${domain}"
|
||||||
|
|
||||||
|
if [[ -z "$hostname" || -z "$username" ]]; then
|
||||||
|
echo -e "${RED}Ошибка: Одно или несколько полей пустые, продолжение невозможно${NC}" >&2
|
||||||
|
log_message "Одно или несколько полей пустые"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${YELLOW}Подтверждение данных:${NC}"
|
||||||
|
echo "Имя АРМ в формате FQDN: $fqdn"
|
||||||
|
echo "Домен: $domain"
|
||||||
|
echo "Имя пользователя: $username"
|
||||||
|
|
||||||
|
read -r -p "Продолжить? (y/n): " confirm
|
||||||
|
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
|
||||||
|
log_message "Пользователь отменил действие"
|
||||||
|
echo "Действие отменено."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_message "fqdn = $fqdn"
|
||||||
|
log_message "Домен = $domain"
|
||||||
|
log_message "Имя пользователя: $username"
|
||||||
|
log_message "Пользователь подтвердил данные, продолжаем"
|
||||||
|
|
||||||
|
/opt/config/ad_setup.sh > /dev/null
|
||||||
|
hostnamectl set-hostname "$fqdn"
|
||||||
|
log_message "Имя ПК заменено на $fqdn"
|
||||||
|
|
||||||
|
sed -i '/^127\.0\.0\.1/d' /etc/hosts
|
||||||
|
sed -i '/^127\.0\.1\.1/d' /etc/hosts
|
||||||
|
sed -i "1i127.0.1.1 $fqdn $hostname" /etc/hosts
|
||||||
|
sed -i "1i127.0.0.1 localhost localhost.localdomain" /etc/hosts
|
||||||
|
|
||||||
|
astra_version=$(cat /etc/astra_version)
|
||||||
|
log_message "Версия Astra Linux: $astra_version"
|
||||||
|
|
||||||
|
echo "Выполняется ввод в домен..."
|
||||||
|
adcli_result=$(adcli join --os-name=astralinux --os-version="$astra_version" -U "$username" -D "$domain" 2>&1)
|
||||||
|
adcli_exit_code=$?
|
||||||
|
|
||||||
|
if [[ $adcli_exit_code -eq 0 ]]; then
|
||||||
|
log_message "Ввод в домен выполнен успешно"
|
||||||
|
else
|
||||||
|
log_message "Ошибка ввода в домен"
|
||||||
|
log_message "Вывод adcli: $adcli_result"
|
||||||
|
echo -e "${RED}Ошибка: Не удалось ввести АРМ в домен!${NC}" >&2
|
||||||
|
echo "$adcli_result" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
sed -i "/^PluginOptions=/d" /etc/X11/fly-dm/fly-dmrc
|
||||||
|
echo "PluginOptions=winbind.DefaultDomain=${domain},winbind.Domains=${domain}:<local>" >> /etc/X11/fly-dm/fly-dmrc
|
||||||
|
|
||||||
|
systemctl enable sssd
|
||||||
|
|
||||||
|
if ! systemctl restart sssd; then
|
||||||
|
echo -e "${YELLOW}Внимание: АРМ в домен заведен, НО служба sssd не стартовала!${NC}" >&2
|
||||||
|
log_message "Ввод в домен успешен, но служба sssd не запустилась"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${GREEN}Успех: АРМ корректно настроен, в домен заведен${NC}"
|
||||||
|
log_message "Ввод в домен полностью завершен успешно"
|
||||||
|
|
||||||
|
echo "Выполняется первый запуск Puppet..."
|
||||||
|
puppet agent -t > /tmp/puppet_first.log 2>&1
|
||||||
|
|
||||||
|
if grep -q "does not match its private key" /tmp/puppet_first.log; then
|
||||||
|
echo -e "${RED}Ошибка: Несовпадение приватного ключа. Удалите старый сертификат на сервере управления.${NC}" >&2
|
||||||
|
echo -e "${RED}Удалите сертификат на сервере и выполните puppet agent -t"
|
||||||
|
log_message "Ошибка: несовпадение приватного ключа. Требуется удаление сертификата на сервере Puppet"
|
||||||
|
rm -rf /etc/puppetlabs/puppet/ssl
|
||||||
|
rm -f /tmp/puppet_first.log
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if grep -qiE "error:|could not|failed" /tmp/puppet_first.log; then
|
||||||
|
log_message "Предупреждение: при первом запуске Puppet обнаружены возможные ошибки. Смотрите /tmp/puppet_first.log"
|
||||||
|
else
|
||||||
|
log_message "Первый запуск Puppet прошел без ошибок сертификатов"
|
||||||
|
fi
|
||||||
|
|
||||||
|
puppet agent -t > /dev/null 2>&1
|
||||||
|
|
||||||
|
systemctl enable puppet
|
||||||
|
|
||||||
|
if ! systemctl start puppet; then
|
||||||
|
echo -e "${YELLOW}Внимание: Подключение выполнено, но службу Puppet запустить не удалось.${NC}" >&2
|
||||||
|
log_message "Предупреждение: службу puppet запустить не удалось"
|
||||||
|
else
|
||||||
|
log_message "Служба Puppet успешно запущена"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${GREEN}Успех: АРМ успешно подключен к puppet-серверу${NC}"
|
||||||
|
log_message "АРМ успешно подключен к puppet-серверу"
|
||||||
|
|
||||||
|
echo -e "${GREEN}Успех: АРМ успешно перезаведен в домен${NC}"
|
||||||
Reference in New Issue
Block a user