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