85 lines
2.4 KiB
Bash
85 lines
2.4 KiB
Bash
#!/bin/bash
|
||
|
||
# --- НАСТРОЙКИ ---
|
||
USERNAME=""
|
||
USER_PASSWORD=""
|
||
SSH_PUB_KEY=""
|
||
|
||
# Проверка прав root
|
||
if [ "$EUID" -ne 0 ]; then
|
||
echo "Пожалуйста, запустите скрипт от имени root (sudo)."
|
||
exit 1
|
||
fi
|
||
|
||
# 1. Определение дистрибутива и имени службы SSH
|
||
if [ -f /etc/os-release ]; then
|
||
. /etc/os-release
|
||
OS=$ID
|
||
else
|
||
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
|
||
fi
|
||
|
||
case "$OS" in
|
||
ubuntu|debian|raspbian)
|
||
SSH_SERVICE="ssh"
|
||
;;
|
||
centos|rhel|fedora|almalinux|rocky)
|
||
SSH_SERVICE="sshd"
|
||
;;
|
||
*)
|
||
SSH_SERVICE="sshd" # Значение по умолчанию
|
||
;;
|
||
esac
|
||
|
||
echo "Определена ОС: $OS. Используемая служба SSH: $SSH_SERVICE"
|
||
|
||
# 2. Создание пользователя
|
||
if id "$USERNAME" &>/dev/null; then
|
||
echo "Пользователь $USERNAME уже существует."
|
||
else
|
||
useradd -m -s /bin/bash "$USERNAME"
|
||
echo "$USERNAME:$USER_PASSWORD" | chpasswd
|
||
echo "Пользователь $USERNAME создан."
|
||
fi
|
||
|
||
# 3. Настройка SSH-ключа
|
||
USER_HOME=$(eval echo "~$USERNAME")
|
||
mkdir -p "$USER_HOME/.ssh"
|
||
echo "$SSH_PUB_KEY" > "$USER_HOME/.ssh/authorized_keys"
|
||
chown -R "$USERNAME:$USERNAME" "$USER_HOME/.ssh"
|
||
chmod 700 "$USER_HOME/.ssh"
|
||
chmod 600 "$USER_HOME/.ssh/authorized_keys"
|
||
|
||
# 4. Настройка sudo NOPASSWD
|
||
SUDOERS_FILE="/etc/sudoers.d/$USERNAME"
|
||
echo "$USERNAME ALL=(ALL) NOPASSWD: ALL" > "$SUDOERS_FILE"
|
||
chmod 440 "$SUDOERS_FILE"
|
||
|
||
# 5. Настройка sshd_config
|
||
SSHD_CONFIG="/etc/ssh/sshd_config"
|
||
[ -f "$SSHD_CONFIG" ] && cp "$SSHD_CONFIG" "${SSHD_CONFIG}.bak" # Бэкап
|
||
|
||
sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' "$SSHD_CONFIG"
|
||
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' "$SSHD_CONFIG"
|
||
|
||
# 6. Универсальный перезапуск службы
|
||
restart_service() {
|
||
if command -v systemctl >/dev/null 2>&1; then
|
||
systemctl restart "$1"
|
||
elif command -v service >/dev/null 2>&1; then
|
||
service "$1" restart
|
||
else
|
||
/etc/init.d/"$1" restart
|
||
fi
|
||
}
|
||
|
||
echo "Проверка конфигурации SSH..."
|
||
if sshd -t; then
|
||
restart_service "$SSH_SERVICE"
|
||
echo "Настройка успешно завершена!"
|
||
else
|
||
echo "Ошибка в конфигурации SSH! Изменения не применены."
|
||
mv "${SSHD_CONFIG}.bak" "$SSHD_CONFIG"
|
||
exit 1
|
||
fi
|