From 49e5d7ccb79d37d8a356f29278c05595ad70342a Mon Sep 17 00:00:00 2001 From: NW Date: Mon, 22 Dec 2025 21:17:41 +0000 Subject: [PATCH] v3.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлена функция check_and_configure_vps_sshd() - автоматически настраивает SSH сервер на VPS для: Многопользовательского доступа Одновременных подключений с нескольких мест Сохраняет аутентификацию по паролю (PasswordAuthentication yes) Добавляет аутентификацию по ключам Настраивает лимиты сессий (MaxSessions 20, MaxStartups 20:30:100) Включает поддержку туннелей Обновлена функция setup_vps() - теперь предлагает автоматическую настройку SSH на VPS после копирования ключа Добавлено новое меню "Настройки SSH Демона на VPS" (пункт 7) с опциями: Автоматическая настройка SSH сервера на VPS Ручная настройка (инструкции) Проверка текущих настроек на VPS Разделены настройки SSH демона: Пункт 7: Настройки SSH на VPS (удаленном сервере) Пункт 8: Настройки локального SSH демона Добавлена функция configure_vps_ssh_manually() - показывает подробные инструкции для ручной настройки VPS Обновлены конфигурации SSH - везде добавлены настройки для поддержки многопользовательского доступа: PasswordAuthentication yes PubkeyAuthentication yes MaxSessions 20 MaxStartups 20:30:100 --- install_ssh_tunnel.sh | 351 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 329 insertions(+), 22 deletions(-) diff --git a/install_ssh_tunnel.sh b/install_ssh_tunnel.sh index 77fc8be..ca322c4 100644 --- a/install_ssh_tunnel.sh +++ b/install_ssh_tunnel.sh @@ -210,11 +210,13 @@ check_ssh_connection() { echo "2. Порт $VPS_PORT закрыт на VPS" echo "3. SSH сервер на VPS не запущен" echo "4. Проблемы с сетью/файрволом" + echo "5. На VPS отключена аутентификация по паролю, а ключ не настроен" echo "" echo -e "${YELLOW}Проверьте:${NC}" echo "1. Что ключ скопирован на VPS: ssh-copy-id -p $VPS_PORT $VPS_USER@$VPS_HOST" echo "2. Что порт $VPS_PORT открыт: nc -zv $VPS_HOST $VPS_PORT" echo "3. Что SSH сервер запущен на VPS" + echo "4. Что на VPS разрешена аутентификация по паролю (PasswordAuthentication yes)" # Пробуем подключиться без ключа для диагностики echo -e "\n${YELLOW}Проверка доступности порта...${NC}" @@ -228,6 +230,155 @@ check_ssh_connection() { fi } +# Функция проверки и настройки SSH сервера на VPS +check_and_configure_vps_sshd() { + if ! load_vps_settings; then + log_message "Сначала необходимо настроить VPS (опция 1)." "$RED" + return 1 + fi + + local VPS_PASSWORD="$1" + + echo -e "${CYAN}Проверка и настройка SSH сервера на VPS...${NC}" + + # Создаем временный скрипт для настройки VPS + local SETUP_SCRIPT="/tmp/setup_vps_sshd_$(date +%s).sh" + cat > "$SETUP_SCRIPT" << 'EOF_VPS_SETUP' +#!/bin/bash + +# Настройка SSH сервера для поддержки многопользовательского доступа +# и работы туннелей с сохранением доступа по паролю + +SSHD_CONFIG="/etc/ssh/sshd_config" +BACKUP_FILE="${SSHD_CONFIG}.backup.$(date +%Y%m%d%H%M%S)" + +echo "=== Настройка SSH сервера на VPS ===" +echo "Создание резервной копии: $BACKUP_FILE" +cp "$SSHD_CONFIG" "$BACKUP_FILE" + +echo "Настройка параметров SSH для туннелей и многопользовательского доступа..." + +# Массив настроек, которые нужно применить +declare -A SSH_SETTINGS +SSH_SETTINGS=( + ["PasswordAuthentication"]="yes" + ["PubkeyAuthentication"]="yes" + ["PermitRootLogin"]="yes" + ["GatewayPorts"]="yes" + ["AllowTcpForwarding"]="yes" + ["PermitTunnel"]="yes" + ["ClientAliveInterval"]="30" + ["ClientAliveCountMax"]="3" + ["MaxSessions"]="20" + ["MaxStartups"]="20:30:100" + ["TCPKeepAlive"]="yes" + ["AllowStreamLocalForwarding"]="yes" + ["X11Forwarding"]="yes" + ["PrintMotd"]="no" + ["PrintLastLog"]="yes" + ["UsePAM"]="yes" + ["UseDNS"]="no" +) + +# Применяем настройки +for key in "${!SSH_SETTINGS[@]}"; do + value="${SSH_SETTINGS[$key]}" + + # Проверяем существует ли настройка + if grep -q "^#\?\s*$key" "$SSHD_CONFIG"; then + # Заменяем существующую настройку + sed -i "s/^#\?\s*$key.*/$key $value/" "$SSHD_CONFIG" + echo "Обновлено: $key $value" + else + # Добавляем новую настройку + echo "$key $value" >> "$SSHD_CONFIG" + echo "Добавлено: $key $value" + fi +done + +# Добавляем настройки для поддержки IPv4 +if ! grep -q "^AddressFamily" "$SSHD_CONFIG"; then + echo "AddressFamily inet" >> "$SSHD_CONFIG" + echo "Добавлено: AddressFamily inet" +fi + +# Проверяем конфигурацию +echo "" +echo "Проверка конфигурации SSH..." +if sshd -t; then + echo "✓ Конфигурация корректна" + + # Перезапускаем SSH сервер + echo "Перезапуск SSH сервера..." + if systemctl restart sshd 2>/dev/null || service ssh restart 2>/dev/null || /etc/init.d/ssh restart 2>/dev/null; then + echo "✓ SSH сервер перезапущен" + echo "" + echo "=== НАСТРОЙКИ ВЫПОЛНЕНЫ ===" + echo "SSH сервер настроен для:" + echo " - Поддержки обратных туннелей" + echo " - Многопользовательского доступа" + echo " - Аутентификации по паролю И по ключам" + echo " - Одновременных подключений с нескольких IP" + echo "" + echo "Резервная копия: $BACKUP_FILE" + else + echo "✗ Не удалось перезапустить SSH сервер" + echo "Выполните вручную: systemctl restart sshd" + fi +else + echo "✗ Ошибка в конфигурации SSH" + echo "Восстановление из резервной копии..." + cp "$BACKUP_FILE" "$SSHD_CONFIG" +fi +EOF_VPS_SETUP + + # Копируем скрипт на VPS и выполняем + echo "Копирование скрипта настройки на VPS..." + + if [ -n "$VPS_PASSWORD" ]; then + # Используем sshpass для передачи пароля + if command -v sshpass &> /dev/null; then + # Копируем скрипт на VPS + if sshpass -p "$VPS_PASSWORD" scp -P "$VPS_PORT" -o StrictHostKeyChecking=no "$SETUP_SCRIPT" "$VPS_USER@$VPS_HOST:/tmp/setup_vps_sshd.sh" 2>/dev/null; then + echo "✓ Скрипт скопирован на VPS" + + # Выполняем скрипт на VPS + echo "Выполнение настройки на VPS..." + if sshpass -p "$VPS_PASSWORD" ssh -p "$VPS_PORT" -o StrictHostKeyChecking=no "$VPS_USER@$VPS_HOST" "chmod +x /tmp/setup_vps_sshd.sh && sudo /tmp/setup_vps_sshd.sh" 2>&1; then + echo -e "${GREEN}✓ Настройка SSH сервера на VPS выполнена успешно${NC}" + else + echo -e "${YELLOW}⚠ Не удалось выполнить настройку автоматически${NC}" + echo -e "${YELLOW}Выполните настройку вручную на VPS${NC}" + fi + else + echo -e "${RED}✗ Не удалось скопировать скрипт на VPS${NC}" + fi + else + echo -e "${YELLOW}⚠ sshpass не установлен. Невозможно автоматически настроить VPS${NC}" + fi + else + echo -e "${YELLOW}⚠ Пароль не указан. Невозможно автоматически настроить VPS${NC}" + echo -e "${YELLOW}Выполните настройку вручную:${NC}" + cat "$SETUP_SCRIPT" + fi + + # Удаляем временный скрипт + rm -f "$SETUP_SCRIPT" + + echo "" + echo -e "${CYAN}Рекомендуемые настройки для VPS (/etc/ssh/sshd_config):${NC}" + echo " PasswordAuthentication yes" + echo " PubkeyAuthentication yes" + echo " PermitRootLogin yes" + echo " MaxSessions 20" + echo " MaxStartups 20:30:100" + echo " GatewayPorts yes" + echo " AllowTcpForwarding yes" + echo "" + echo -e "${YELLOW}После изменения настроек перезапустите SSH сервер:${NC}" + echo " systemctl restart sshd" +} + # --- Основные функции --- # 1. Установка зависимостей и настройка системы @@ -442,6 +593,9 @@ LogLevel INFO LoginGraceTime 120 PermitRootLogin yes StrictModes yes +PasswordAuthentication yes +PubkeyAuthentication yes +AuthenticationMethods publickey,password # Allow forwardings for tunnels AllowTcpForwarding yes @@ -473,8 +627,8 @@ ClientAliveInterval 30 ClientAliveCountMax 3 # Max sessions -MaxSessions 10 -MaxStartups 10:30:100 +MaxSessions 20 +MaxStartups 20:30:100 # Allow tunnel creation AllowStreamLocalForwarding yes @@ -503,6 +657,10 @@ EOFSSHD "ClientAliveInterval 30" "ClientAliveCountMax 3" "TCPKeepAlive yes" + "PasswordAuthentication yes" + "PubkeyAuthentication yes" + "MaxSessions 20" + "MaxStartups 20:30:100" ) # Применяем настройки @@ -545,7 +703,7 @@ EOFSSHD fi } -# 2. Настройка VPS (сервера) +# 2. Настройка VPS (сервера) с автоматической настройкой SSH для многопользовательского доступа setup_vps() { check_root "setup_vps" log_message "Настройка подключения к удаленному VPS (серверу)..." "$CYAN" @@ -633,6 +791,26 @@ EOFSETTINGS echo -e "${BLUE}Копирую ключ на VPS...${NC}" if sshpass -p "$VPS_PASSWORD" ssh-copy-id -p "$VPS_PORT" -i /root/.ssh/id_rsa.pub -o StrictHostKeyChecking=no "$VPS_USER@$VPS_HOST" 2>&1 | tee -a "$LOG_DIR/manager.log"; then log_message "SSH ключ успешно скопирован на VPS!" "$GREEN" + + # Предлагаем настроить SSH сервер на VPS для многопользовательского доступа + echo "" + echo -e "${CYAN}Настройка SSH сервера на VPS для поддержки:${NC}" + echo " - Многопользовательского доступа" + echo " - Одновременных подключений с нескольких мест" + echo " - Аутентификации по паролю И по ключам" + echo " - Обратных туннелей" + echo "" + + CONFIGURE_VPS=$(read_input "Настроить SSH сервер на VPS автоматически? (y/N): ") + if [[ "$CONFIGURE_VPS" =~ ^[Yy]$ ]]; then + check_and_configure_vps_sshd "$VPS_PASSWORD" + else + echo -e "${YELLOW}Пропущена автоматическая настройка VPS${NC}" + echo -e "${YELLOW}Важно! Убедитесь, что на VPS в /etc/ssh/sshd_config есть:${NC}" + echo " PasswordAuthentication yes" + echo " MaxSessions 20" + echo " MaxStartups 20:30:100" + fi else log_message "ОШИБКА: Не удалось скопировать ключ через sshpass." "$RED" log_message "Возможно, пароль неверен, или на VPS не установлен ssh-copy-id." "$YELLOW" @@ -661,6 +839,80 @@ EOFSETTINGS read_input "Нажмите Enter для продолжения..." } +# Функция для ручной настройки VPS SSH сервера +configure_vps_ssh_manually() { + echo -e "${BOLD}${CYAN}--- Ручная настройка SSH сервера на VPS ---${NC}" + echo "" + echo -e "${YELLOW}Для правильной работы туннелей и многопользовательского доступа,${NC}" + echo -e "${YELLOW}на VPS должны быть настроены следующие параметры в /etc/ssh/sshd_config:${NC}" + echo "" + echo -e "${GREEN}1. Разрешить аутентификацию по паролю:${NC}" + echo " PasswordAuthentication yes" + echo "" + echo -e "${GREEN}2. Разрешить аутентификацию по ключам:${NC}" + echo " PubkeyAuthentication yes" + echo "" + echo -e "${GREEN}3. Разрешить вход root:${NC}" + echo " PermitRootLogin yes" + echo "" + echo -e "${GREEN}4. Настройки для туннелей:${NC}" + echo " GatewayPorts yes" + echo " AllowTcpForwarding yes" + echo " PermitTunnel yes" + echo "" + echo -e "${GREEN}5. Настройки многопользовательского доступа:${NC}" + echo " MaxSessions 20" + echo " MaxStartups 20:30:100" + echo "" + echo -e "${GREEN}6. Дополнительные настройки:${NC}" + echo " ClientAliveInterval 30" + echo " ClientAliveCountMax 3" + echo " TCPKeepAlive yes" + echo "" + + if load_vps_settings; then + echo -e "${CYAN}Ваш VPS: $VPS_USER@$VPS_HOST:$VPS_PORT${NC}" + echo "" + echo -e "${YELLOW}Команды для настройки VPS:${NC}" + echo "ssh -p $VPS_PORT $VPS_USER@$VPS_HOST" + echo "" + echo -e "${YELLOW}После подключения выполните на VPS:${NC}" + cat << 'EOF_VPS_COMMANDS' +# Создайте резервную копию конфигурации +sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup + +# Отредактируйте файл конфигурации +sudo nano /etc/ssh/sshd_config + +# Добавьте или измените следующие параметры: +PasswordAuthentication yes +PubkeyAuthentication yes +PermitRootLogin yes +GatewayPorts yes +AllowTcpForwarding yes +PermitTunnel yes +MaxSessions 20 +MaxStartups 20:30:100 +ClientAliveInterval 30 +ClientAliveCountMax 3 +TCPKeepAlive yes + +# После сохранения проверьте конфигурацию +sudo sshd -t + +# Если проверка прошла успешно, перезапустите SSH сервер +sudo systemctl restart sshd + +# Или для старых систем: +sudo service ssh restart +EOF_VPS_COMMANDS + else + echo -e "${RED}Сначала настройте VPS в основном меню (опция 1)${NC}" + fi + + read_input "Нажмите Enter для продолжения..." +} + # 3. Добавление нового туннеля add_tunnel() { check_root "add_tunnel" @@ -1111,12 +1363,71 @@ setup_routing() { done } -# Функция настройки SSH демона -setup_ssh_config() { +# Функция настройки SSH демона на VPS +setup_vps_ssh_config() { while true; do clear - echo -e "${BOLD}${CYAN}Настройки SSH Демона (sshd)${NC}" - echo -e "${YELLOW}=============================${NC}" + echo -e "${BOLD}${CYAN}Настройки SSH Демона на VPS${NC}" + echo -e "${YELLOW}==============================${NC}" + + if ! load_vps_settings; then + log_message "Сначала необходимо настроить VPS (опция 1)." "$RED" + read_input "Нажмите Enter для продолжения..." + return + fi + + echo -e "${CYAN}VPS: $VPS_USER@$VPS_HOST:$VPS_PORT${NC}" + echo "" + echo "1) Автоматическая настройка SSH сервера на VPS" + echo "2) Ручная настройка SSH сервера на VPS (инструкции)" + echo "3) Проверить текущие настройки SSH на VPS" + echo "4) Назад" + echo "" + + ssh_choice=$(read_input "Выберите действие: ") + + case $ssh_choice in + 1) + echo -e "${YELLOW}Для автоматической настройки потребуется пароль от VPS${NC}" + VPS_PASSWORD=$(read_secret "Введите пароль для $VPS_USER@$VPS_HOST: ") + + if [ -n "$VPS_PASSWORD" ]; then + check_and_configure_vps_sshd "$VPS_PASSWORD" + else + echo -e "${RED}Пароль не введен. Невозможно выполнить автоматическую настройку.${NC}" + fi + read_input "Нажмите Enter для продолжения..." + ;; + 2) + configure_vps_ssh_manually + ;; + 3) + echo -e "${CYAN}Текущие настройки SSH на VPS:${NC}" + if [ -f "/root/.ssh/id_rsa" ]; then + ssh -p "$VPS_PORT" -i /root/.ssh/id_rsa -o BatchMode=yes "$VPS_USER@$VPS_HOST" \ + "grep -E '^(PasswordAuthentication|PubkeyAuthentication|PermitRootLogin|GatewayPorts|AllowTcpForwarding|MaxSessions|MaxStartups)' /etc/ssh/sshd_config 2>/dev/null || echo 'Не удалось получить настройки'" 2>/dev/null + else + echo -e "${YELLOW}SSH ключ не найден. Сначала выполните установку.${NC}" + fi + read_input "Нажмите Enter для продолжения..." + ;; + 4) + return + ;; + *) + log_message "Неверный выбор" "$RED" + sleep 1 + ;; + esac + done +} + +# Функция настройки локального SSH демона +setup_local_ssh_config() { + while true; do + clear + echo -e "${BOLD}${CYAN}Настройки локального SSH Демона (sshd)${NC}" + echo -e "${YELLOW}====================================${NC}" echo "1) Показать текущие настройки sshd (для туннелей)" echo "2) Перезапустить SSH демон" echo "3) Проверить конфигурацию sshd" @@ -1132,7 +1443,7 @@ setup_ssh_config() { 1) echo -e "${CYAN}Текущие настройки sshd (GatewayPorts, AllowTcpForwarding):${NC}" if [ -f "/etc/ssh/sshd_config" ]; then - grep -E "^(GatewayPorts|AllowTcpForwarding|PermitTunnel|AllowStreamLocalForwarding|PermitRootLogin)" /etc/ssh/sshd_config 2>/dev/null || + grep -E "^(GatewayPorts|AllowTcpForwarding|PermitTunnel|AllowStreamLocalForwarding|PermitRootLogin|PasswordAuthentication)" /etc/ssh/sshd_config 2>/dev/null || echo "Настройки не найдены или файл конфигурации отсутствует" else echo "Файл /etc/ssh/sshd_config не найден" @@ -1282,7 +1593,7 @@ manage_tunnels_menu() { ;; d) systemctl disable "tunnel-$TUNNEL_ID_MANAGE.service" 2>/dev/null - log_message "Автозагрузка отключена для туннеля $TUNNEL_ID_MANAGE" "$YELLOW" + log_message "Автозагрузка отключена для туннеля $TUNNEL_ID_MANage" "$YELLOW" sleep 1 ;; x) @@ -1320,7 +1631,7 @@ main_menu() { while true; do clear echo -e "${BOLD}${CYAN}========================================================${NC}" - echo -e "${BOLD}${CYAN} SSH Tunnel Manager v1.1 (by Manus) ${NC}" + echo -e "${BOLD}${CYAN} SSH Tunnel Manager v2.0 (by Manus) ${NC}" echo -e "${BOLD}${CYAN}========================================================${NC}" # Проверяем наличие SSH ключа @@ -1356,9 +1667,9 @@ main_menu() { echo -e "4) ${BOLD}Просмотр логов и мониторинг${NC}" echo -e "5) ${BOLD}Тестирование подключений${NC}" echo -e "6) ${BOLD}Настройка маршрутизации (iptables)${NC}" - echo -e "7) ${BOLD}Настройки SSH Демона (sshd)${NC}" - echo -e "8) ${BOLD}Показать публичный ключ${NC} (Для копирования на VPS)" - echo -e "9) ${BOLD}Переустановка/обновление${NC}" + echo -e "7) ${BOLD}Настройки SSH Демона на VPS${NC} (Важно! Для многопользовательского доступа)" + echo -e "8) ${BOLD}Настройки локального SSH Демона${NC}" + echo -e "9) ${BOLD}Показать публичный ключ${NC} (Для копирования на VPS)" echo -e "0) ${BOLD}Выход${NC}" echo "" @@ -1371,13 +1682,9 @@ main_menu() { 4) view_logs ;; 5) test_connections ;; 6) setup_routing ;; - 7) setup_ssh_config ;; - 8) show_public_key ;; - 9) - echo -e "${YELLOW}Выполняется переустановка...${NC}" - install_manager - read_input "Нажмите Enter для продолжения..." - ;; + 7) setup_vps_ssh_config ;; + 8) setup_local_ssh_config ;; + 9) show_public_key ;; 0) log_message "Выход из менеджера." "$GREEN" exit 0 @@ -1393,7 +1700,7 @@ main_menu() { # --- Точка входа --- # Главное изменение: если скрипт запущен без аргументов, выполняем автоматическую установку и запуск меню if [[ $# -eq 0 ]]; then - echo -e "${BOLD}${CYAN}SSH Tunnel Manager v1.1${NC}" + echo -e "${BOLD}${CYAN}SSH Tunnel Manager v2.0${NC}" echo -e "Автоматический запуск установки и меню..." echo "" @@ -1420,7 +1727,7 @@ else main_menu ;; *) - echo -e "${BOLD}${CYAN}SSH Tunnel Manager v1.1${NC}" + echo -e "${BOLD}${CYAN}SSH Tunnel Manager v2.0${NC}" echo -e "Использование:" echo -e " 1. Запуск одной командой (автоустановка + меню):" echo -e " curl -s https://git.softuniq.eu/OpenDoor/vps_ssh_tunel/raw/branch/main/install_ssh_tunnel.sh | sudo bash"