Добавлена функция 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
This commit is contained in:
NW
2025-12-22 21:17:41 +00:00
parent bb20698de9
commit 49e5d7ccb7

View File

@@ -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"