Основные исправления:

    Интерактивный запрос данных VPS - скрипт теперь явно запрашивает:

        IP/домен VPS (обязательное поле)

        Порт SSH (по умолчанию 22)

        Имя пользователя (root или другой)

    Улучшенная SSH конфигурация для локальной сети:

        Добавлены параметры TCPKeepAlive, ControlMaster, ControlPersist

        Увеличены таймауты соединения

        Настроены буферы и компрессия

        Добавлены современные шифры для стабильности

    Настройка SSH демона:

        Автоматическая настройка /etc/ssh/sshd_config

        Включение ClientAliveInterval и TCPKeepAlive

        Разрешение подключения по паролю (для локальной сети)

        Автоматический перезапуск SSH демона

    Улучшенная обработка ошибок:

        Проверка доступности порта VPS

        Несколько методов копирования SSH ключа

        Возможность продолжить установку даже если подключение не удалось

    Сохраняются настройки VPS в /etc/ssh_tunnel/vps_settings.conf
This commit is contained in:
NW
2025-12-22 15:23:04 +00:00
parent e7a43aa210
commit f3681ea2ab

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Установщик автономного менеджера SSH туннелей
# Использование: bash <(curl -s https://raw.githubusercontent.com/ВАШ_ЛОГИН/ВАШ_РЕПОЗИТОРИЙ/main/install_ssh_tunnel.sh)
# Использование: bash <(curl -s https://git.softuniq.eu/OpenDoor/vps_ssh_tunel/raw/branch/main/install_ssh_tunnel.sh)
# Цвета для вывода
RED='\033[0;31m'
@@ -29,7 +29,7 @@ echo ""
if [[ $EUID -ne 0 ]]; then
echo -e "${RED}ОШИБКА: Этот скрипт требует прав root (sudo).${NC}"
echo "Пожалуйста, запустите снова:"
echo -e "${BOLD}sudo bash <(curl -s <URL_ВАШЕГО_СКРИПТА>)${NC}"
echo -e "${BOLD}sudo bash <(curl -s https://git.softuniq.eu/OpenDoor/vps_ssh_tunel/raw/branch/main/install_ssh_tunnel.sh)${NC}"
exit 1
fi
@@ -118,7 +118,16 @@ setup_ssh() {
echo -e "${BOLD}${YELLOW}════════════════════════════════════════════════════════════════${NC}"
echo ""
read -p "Введите IP адрес или доменное имя VPS: " VPS_HOST
# Запрос данных VPS
while true; do
read -p "Введите IP адрес или доменное имя VPS: " VPS_HOST
if [ -n "$VPS_HOST" ]; then
break
else
echo -e "${RED}Поле не может быть пустым!${NC}"
fi
done
read -p "Введите порт SSH (по умолчанию 22): " VPS_PORT
VPS_PORT=${VPS_PORT:-22}
@@ -132,7 +141,14 @@ setup_ssh() {
VPS_USER="root"
echo -e "${YELLOW}Будет использоваться пользователь: root${NC}"
else
read -p "Введите имя пользователя: " VPS_USER
while true; do
read -p "Введите имя пользователя: " VPS_USER
if [ -n "$VPS_USER" ]; then
break
else
echo -e "${RED}Имя пользователя не может быть пустым!${NC}"
fi
done
fi
# Проверка подключения
@@ -164,11 +180,12 @@ setup_ssh() {
log_message "SSH ключ сгенерирован" "$GREEN"
fi
# Настройка SSH конфигурации
log_message "Настройка конфигурации SSH..." "$BLUE"
# Настройка SSH конфигурации для стабильного подключения
log_message "Настройка конфигурации SSH для стабильного подключения..." "$BLUE"
# Создание конфига для root
# Создание конфига для root с улучшенными настройками
cat > /root/.ssh/config << EOF
# Основная конфигурация SSH
Host tunnel-vps
HostName $VPS_HOST
Port $VPS_PORT
@@ -178,19 +195,77 @@ Host tunnel-vps
UserKnownHostsFile /dev/null
ServerAliveInterval 30
ServerAliveCountMax 3
ConnectTimeout 10
ConnectTimeout 30
TCPKeepAlive yes
IdentitiesOnly yes
ExitOnForwardFailure yes
# Увеличенные настройки для локальной сети
IPQoS throughput
Compression yes
ControlMaster auto
ControlPath ~/.ssh/control-%r@%h:%p
ControlPersist 10m
# Дополнительные настройки стабильности
GSSAPIAuthentication no
AddressFamily inet
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
Host *
# Глобальные настройки для всех хостов
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
ServerAliveInterval 30
ServerAliveCountMax 3
TCPKeepAlive yes
Compression yes
ControlMaster auto
ControlPath ~/.ssh/control-%r@%h:%p
ControlPersist 10m
ConnectTimeout 30
# Настройки для локальной сети
GSSAPIAuthentication no
AddressFamily inet
# Увеличение размера буферов
SendEnv LANG LC_*
HashKnownHosts yes
# Настройки переподключения
RekeyLimit 1G 1h
EOF
chmod 600 /root/.ssh/config
# Настройка SSH демона для локальных подключений
log_message "Настройка SSH демона для локальных подключений..." "$BLUE"
# Бэкап оригинального конфига
SSHD_CONFIG="/etc/ssh/sshd_config"
if [ -f "$SSHD_CONFIG" ]; then
cp "$SSHD_CONFIG" "${SSHD_CONFIG}.backup.$(date +%Y%m%d%H%M%S)"
# Добавляем настройки для стабильности
if ! grep -q "ClientAliveInterval" "$SSHD_CONFIG"; then
echo "ClientAliveInterval 30" >> "$SSHD_CONFIG"
fi
if ! grep -q "ClientAliveCountMax" "$SSHD_CONFIG"; then
echo "ClientAliveCountMax 3" >> "$SSHD_CONFIG"
fi
if ! grep -q "TCPKeepAlive" "$SSHD_CONFIG"; then
echo "TCPKeepAlive yes" >> "$SSHD_CONFIG"
fi
# Разрешаем подключение по паролю (если нужно)
sed -i 's/^#\?PasswordAuthentication .*/PasswordAuthentication yes/' "$SSHD_CONFIG"
# Разрешаем подключение root (если нужно)
sed -i 's/^#\?PermitRootLogin .*/PermitRootLogin yes/' "$SSHD_CONFIG"
# Перезапускаем SSH демон
systemctl restart sshd 2>/dev/null || service ssh restart 2>/dev/null
log_message "SSH демон перезапущен с новыми настройками" "$GREEN"
fi
# Копирование ключа на VPS
echo ""
log_message "Копирование SSH ключа на VPS ($VPS_USER@$VPS_HOST)..." "$CYAN"
@@ -229,50 +304,81 @@ EOF
fi
fi
# Тестовое подключение
log_message "Тестовое подключение к VPS..." "$BLUE"
if ssh -p "$VPS_PORT" -o BatchMode=yes -o ConnectTimeout=5 "$VPS_USER@$VPS_HOST" "echo 'SSH подключение успешно!'"; then
# Тестовое подключение с улучшенными параметрами
log_message "Тестовое подключение к VPS с новыми настройками..." "$BLUE"
# Тест с подробным выводом
echo -e "${CYAN}Выполняю тестовое подключение...${NC}"
if ssh -p "$VPS_PORT" \
-o BatchMode=yes \
-o ConnectTimeout=15 \
-o ServerAliveInterval=30 \
-o TCPKeepAlive=yes \
"$VPS_USER@$VPS_HOST" \
"echo 'SSH подключение успешно! Система: \$(uname -a)'"; then
log_message "Тестовое подключение прошло успешно!" "$GREEN"
echo -e "${GREEN}✓ Настройки SSH работают корректно${NC}"
else
log_message "Тестовое подключение не удалось" "$YELLOW"
echo -e "${YELLOW}⚠ SSH подключение не удалось, но установка продолжается${NC}"
echo -e "${YELLOW}Вы сможете настроить подключение позже через tunnel-manager${NC}"
read -p "Продолжить установку? (y/n): " CONTINUE_INSTALL
if [[ ! "$CONTINUE_INSTALL" =~ ^[Yy]$ ]]; then
exit 1
fi
fi
# Настройка для не-root пользователей (если запущено не из-под root)
# Настройка для не-root пользователей
if [[ $EUID -eq 0 ]] && [ -d "/home/" ]; then
log_message "Настройка SSH для всех пользователей системы..." "$CYAN"
echo ""
read -p "Настроить SSH для обычных пользователей системы? (y/n): " SETUP_USERS
# Копируем конфиг для всех домашних директорий
for HOME_DIR in /home/*; do
if [ -d "$HOME_DIR" ]; then
USER=$(basename "$HOME_DIR")
USER_SSH_DIR="$HOME_DIR/.ssh"
mkdir -p "$USER_SSH_DIR"
chmod 700 "$USER_SSH_DIR"
chown "$USER:$USER" "$USER_SSH_DIR"
# Копируем конфиг
cp /root/.ssh/config "$USER_SSH_DIR/config" 2>/dev/null
if [ -f "$USER_SSH_DIR/config" ]; then
chown "$USER:$USER" "$USER_SSH_DIR/config"
chmod 600 "$USER_SSH_DIR/config"
if [[ "$SETUP_USERS" =~ ^[Yy]$ ]]; then
log_message "Настройка SSH для всех пользователей системы..." "$CYAN"
for HOME_DIR in /home/*; do
if [ -d "$HOME_DIR" ] && [ "$HOME_DIR" != "/home/*" ]; then
USER=$(basename "$HOME_DIR")
USER_SSH_DIR="$HOME_DIR/.ssh"
echo -e "${CYAN}Настройка пользователя: $USER${NC}"
mkdir -p "$USER_SSH_DIR"
chmod 700 "$USER_SSH_DIR"
chown "$USER:$USER" "$USER_SSH_DIR"
# Копируем конфиг
cp /root/.ssh/config "$USER_SSH_DIR/config" 2>/dev/null
if [ -f "$USER_SSH_DIR/config" ]; then
chown "$USER:$USER" "$USER_SSH_DIR/config"
chmod 600 "$USER_SSH_DIR/config"
fi
# Копируем ключ если нужно
read -p " Скопировать SSH ключ для пользователя $USER? (y/n): " COPY_FOR_USER
if [[ "$COPY_FOR_USER" =~ ^[Yy]$ ]]; then
cp /root/.ssh/id_rsa* "$USER_SSH_DIR/" 2>/dev/null
chown -R "$USER:$USER" "$USER_SSH_DIR"
chmod 600 "$USER_SSH_DIR/id_rsa" 2>/dev/null
chmod 644 "$USER_SSH_DIR/id_rsa.pub" 2>/dev/null
echo -e " ${GREEN}✓ Ключ скопирован для $USER${NC}"
fi
fi
# Копируем ключ если нужно
read -p "Скопировать SSH ключ для пользователя $USER? (y/n): " COPY_FOR_USER
if [[ "$COPY_FOR_USER" =~ ^[Yy]$ ]]; then
cp /root/.ssh/id_rsa* "$USER_SSH_DIR/" 2>/dev/null
chown -R "$USER:$USER" "$USER_SSH_DIR"
chmod 600 "$USER_SSH_DIR/id_rsa" 2>/dev/null
chmod 644 "$USER_SSH_DIR/id_rsa.pub" 2>/dev/null
fi
fi
done
done
fi
fi
# Сохранение настроек VPS для использования в скриптах
log_message "Сохранение настроек VPS..." "$BLUE"
cat > /etc/ssh_tunnel/vps_settings.conf << EOF
# Настройки VPS для автономных туннелей
VPS_HOST="$VPS_HOST"
VPS_PORT="$VPS_PORT"
VPS_USER="$VPS_USER"
CONFIGURED_ON="$(date '+%Y-%m-%d %H:%M:%S')"
EOF
log_message "Настройки SSH сохранены в /etc/ssh_tunnel/vps_settings.conf" "$GREEN"
}
# Установка основного скрипта
@@ -284,15 +390,17 @@ install_main_script() {
mkdir -p /var/log/ssh_tunnel
mkdir -p /etc/ssh_tunnel
# Скачивание или создание основного скрипта
# Здесь должен быть ваш основной скрипт из Git репозитория
# Для примера создадим базовую версию
# Проверяем, есть ли сохраненные настройки VPS
if [ -f /etc/ssh_tunnel/vps_settings.conf ]; then
source /etc/ssh_tunnel/vps_settings.conf
fi
cat > /opt/ssh_tunnel_manager/manager.sh << 'EOF'
# Создание основного скрипта с улучшенной обработкой подключений
cat > /opt/ssh_tunnel_manager/manager.sh << EOF
#!/bin/bash
# Основной скрипт менеджера SSH туннелей
# Версия 2.0 - Полностью автономный
# Версия 2.1 - Улучшенная стабильность подключений
# Конфигурация
CONFIG_DIR="/etc/ssh_tunnel"
@@ -306,30 +414,116 @@ source "$SCRIPT_DIR/colors.sh" 2>/dev/null || {
BLUE='\033[0;34m'; CYAN='\033[0;36m'; NC='\033[0m'; BOLD='\033[1m'
}
# Загрузка настроек VPS если есть
if [ -f "/etc/ssh_tunnel/vps_settings.conf" ]; then
source "/etc/ssh_tunnel/vps_settings.conf"
fi
# Функция проверки подключения
check_ssh_connection() {
if [ -z "\$VPS_HOST" ] || [ -z "\$VPS_USER" ]; then
echo -e "\${RED}Настройки VPS не найдены!\${NC}"
echo -e "Запустите установку заново или настройте VPS вручную."
return 1
fi
echo -e "\${CYAN}Проверка подключения к \${VPS_USER}@\${VPS_HOST}:\${VPS_PORT:-22}...\${NC}"
if timeout 15 ssh -p "\${VPS_PORT:-22}" \\
-o BatchMode=yes \\
-o ConnectTimeout=10 \\
-o ServerAliveInterval=30 \\
"\${VPS_USER}@\${VPS_HOST}" \\
"echo 'Connected'" 2>/dev/null; then
echo -e "\${GREEN}✓ Подключение успешно\${NC}"
return 0
else
echo -e "\${RED}✗ Не удалось подключиться\${NC}"
return 1
fi
}
# Функция настройки нового VPS
setup_new_vps() {
echo -e "\${BOLD}\${CYAN}Настройка нового VPS подключения\${NC}"
echo -e "\${YELLOW}========================================\${NC}"
read -p "Введите IP адрес или домен VPS: " NEW_VPS_HOST
read -p "Введите порт SSH (22): " NEW_VPS_PORT
NEW_VPS_PORT=\${NEW_VPS_PORT:-22}
read -p "Введите имя пользователя: " NEW_VPS_USER
# Проверка подключения
echo -e "\${CYAN}Проверка подключения...\${NC}"
if timeout 10 ssh -p "\$NEW_VPS_PORT" \\
-o ConnectTimeout=5 \\
"\$NEW_VPS_USER@\$NEW_VPS_HOST" \\
"echo 'Проверка успешна'" 2>/dev/null; then
echo -e "\${GREEN}✓ Подключение работает\${NC}"
# Сохранение настроек
cat > /etc/ssh_tunnel/vps_settings.conf << CONFIGEOF
# Настройки VPS для автономных туннелей
VPS_HOST="\$NEW_VPS_HOST"
VPS_PORT="\$NEW_VPS_PORT"
VPS_USER="\$NEW_VPS_USER"
CONFIGURED_ON="\$(date '+%Y-%m-%d %H:%M:%S')"
CONFIGEOF
echo -e "\${GREEN}Настройки сохранены!\${NC}"
export VPS_HOST="\$NEW_VPS_HOST"
export VPS_PORT="\$NEW_VPS_PORT"
export VPS_USER="\$NEW_VPS_USER"
else
echo -e "\${RED}Не удалось подключиться к VPS\${NC}"
echo -e "\${YELLOW}Проверьте:\${NC}"
echo -e "1. Правильность адреса и порта"
echo -e "2. Доступность VPS из сети"
echo -e "3. Наличие SSH ключа в authorized_keys на VPS"
fi
}
# Основное меню
show_menu() {
clear
echo -e "${BOLD}${CYAN}════════════════════════════════════════════════════════════════${NC}"
echo -e "${BOLD}${CYAN} АВТОНОМНЫЙ МЕНЕДЖЕР SSH ТУННЕЛЕЙ v2.0 ${NC}"
echo -e "${BOLD}${CYAN}════════════════════════════════════════════════════════════════${NC}"
echo ""
echo -e "\${BOLD}\${CYAN}════════════════════════════════════════════════════════════════\${NC}"
echo -e "\${BOLD}\${CYAN} АВТОНОМНЫЙ МЕНЕДЖЕР SSH ТУННЕЛЕЙ v2.1 \${NC}"
echo -e "\${BOLD}\${CYAN}════════════════════════════════════════════════════════════════\${NC}"
# Проверка статуса
check_system_status
# Отображение текущих настроек VPS
if [ -n "\$VPS_HOST" ]; then
echo -e "\${CYAN}Текущий VPS: \${VPS_USER}@\${VPS_HOST}:\${VPS_PORT:-22}\${NC}"
else
echo -e "\${RED}VPS не настроен! Выберите опцию 9 для настройки.\${NC}"
fi
echo ""
echo -e "${BOLD}${YELLOW}[1]${NC} Создать новый автономный туннель"
echo -e "${BOLD}${YELLOW}[2]${NC} Быстрый туннель (SSH 22 порт)"
echo -e "${BOLD}${YELLOW}[3]${NC} Управление существующими туннелями"
echo -e "${BOLD}${YELLOW}[4]${NC} Настройка автозапуска"
echo -e "${BOLD}${YELLOW}[5]${NC} Просмотр логов и мониторинг"
echo -e "${BOLD}${YELLOW}[6]${NC} Тестирование подключений"
echo -e "${BOLD}${YELLOW}[7]${NC} Настройка маршрутизации"
echo -e "${BOLD}${YELLOW}[8]${NC} Выход"
echo ""
read -p "Выберите опцию [1-8]: " choice
case $choice in
# Проверка статуса подключения
if [ -n "\$VPS_HOST" ]; then
echo -e "\${CYAN}Проверка состояния подключения...\${NC}"
if check_ssh_connection; then
echo -e "\${GREEN}✓ Соединение с VPS активно\${NC}"
else
echo -e "\${RED}✗ Нет соединения с VPS\${NC}"
fi
echo ""
fi
echo -e "\${BOLD}\${YELLOW}[1]\${NC} Создать новый автономный туннель"
echo -e "\${BOLD}\${YELLOW}[2]\${NC} Быстрый туннель (SSH 22 порт)"
echo -e "\${BOLD}\${YELLOW}[3]\${NC} Управление существующими туннелями"
echo -e "\${BOLD}\${YELLOW}[4]\${NC} Настройка автозапуска"
echo -e "\${BOLD}\${YELLOW}[5]\${NC} Просмотр логов и мониторинг"
echo -e "\${BOLD}\${YELLOW}[6]\${NC} Тестирование подключений"
echo -e "\${BOLD}\${YELLOW}[7]\${NC} Настройка маршрутизации"
echo -e "\${BOLD}\${YELLOW}[8]\${NC} Настройки SSH"
echo -e "\${BOLD}\${YELLOW}[9]\${NC} Настройка/смена VPS"
echo -e "\${BOLD}\${YELLOW}[0]\${NC} Выход"
echo ""
read -p "Выберите опцию [0-9]: " choice
case \$choice in
1) create_tunnel ;;
2) quick_ssh_tunnel ;;
3) manage_tunnels ;;
@@ -337,15 +531,176 @@ show_menu() {
5) view_logs ;;
6) test_connections ;;
7) setup_routing ;;
8) exit 0 ;;
*) echo -e "${RED}Неверный выбор${NC}"; sleep 1 ;;
8) setup_ssh_config ;;
9) setup_new_vps ;;
0) exit 0 ;;
*) echo -e "\${RED}Неверный выбор\${NC}"; sleep 1 ;;
esac
}
# Остальные функции скрипта...
# Здесь должен быть полный код вашего менеджера туннелей
# Пример функции создания туннеля
create_tunnel() {
echo -e "\${CYAN}Создание нового туннеля...\${NC}"
if [ -z "\$VPS_HOST" ]; then
echo -e "\${RED}Сначала настройте VPS (опция 9)\${NC}"
sleep 2
return
fi
read -p "Введите локальный порт (например 22): " LOCAL_PORT
read -p "Введите удаленный порт на VPS (например 10022): " REMOTE_PORT
echo -e "\${CYAN}Создание туннеля \$LOCAL_PORT -> \$REMOTE_PORT на \${VPS_HOST}...\${NC}"
# Создание конфигурации
TUNNEL_ID="tunnel_\${REMOTE_PORT}_\$(date +%s)"
cat > "/etc/ssh_tunnel/\${TUNNEL_ID}.conf" << EOF
TUNNEL_ID="\$TUNNEL_ID"
VPS_HOST="\$VPS_HOST"
VPS_PORT="\$VPS_PORT"
VPS_USER="\$VPS_USER"
LOCAL_PORT="\$LOCAL_PORT"
REMOTE_PORT="\$REMOTE_PORT"
CREATED="\$(date '+%Y-%m-%d %H:%M:%S')"
EOF
echo -e "\${GREEN}Туннель создан! Конфиг: /etc/ssh_tunnel/\${TUNNEL_ID}.conf\${NC}"
# Создание службы
create_service "\$TUNNEL_ID"
}
# Запуск меню
# Быстрый SSH туннель
quick_ssh_tunnel() {
echo -e "\${CYAN}Создание быстрого SSH туннеля...\${NC}"
if [ -z "\$VPS_HOST" ]; then
echo -e "\${RED}Сначала настройте VPS (опция 9)\${NC}"
sleep 2
return
fi
REMOTE_PORT="10022"
LOCAL_PORT="22"
echo -e "\${YELLOW}Будет создан туннель: localhost:22 -> \${VPS_HOST}:\${REMOTE_PORT}\${NC}"
TUNNEL_ID="ssh_tunnel_\${REMOTE_PORT}"
cat > "/etc/ssh_tunnel/\${TUNNEL_ID}.conf" << EOF
TUNNEL_ID="\$TUNNEL_ID"
VPS_HOST="\$VPS_HOST"
VPS_PORT="\$VPS_PORT"
VPS_USER="\$VPS_USER"
LOCAL_PORT="\$LOCAL_PORT"
REMOTE_PORT="\$REMOTE_PORT"
CREATED="\$(date '+%Y-%m-%d %H:%M:%S')"
TYPE="ssh"
EOF
echo -e "\${GREEN}SSH туннель создан!\${NC}"
echo -e "\${CYAN}Для подключения используйте:\${NC}"
echo -e "\${BOLD}ssh -p \$REMOTE_PORT \${VPS_USER}@\${VPS_HOST}\${NC}"
create_service "\$TUNNEL_ID"
}
# Функция создания службы
create_service() {
local tunnel_id="\$1"
local service_file="/etc/systemd/system/ssh-tunnel-\${tunnel_id}.service"
cat > "\$service_file" << EOF
[Unit]
Description=SSH Tunnel: \$tunnel_id
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
EnvironmentFile=/etc/ssh_tunnel/\${tunnel_id}.conf
ExecStart=/usr/bin/autossh -M 0 -N \\
-o "ExitOnForwardFailure=yes" \\
-o "ServerAliveInterval=30" \\
-o "ServerAliveCountMax=3" \\
-o "StrictHostKeyChecking=no" \\
-o "UserKnownHostsFile=/dev/null" \\
-o "TCPKeepAlive=yes" \\
-o "ConnectTimeout=30" \\
-R \${REMOTE_PORT}:localhost:\${LOCAL_PORT} \\
\${VPS_USER}@\${VPS_HOST} -p \${VPS_PORT}
Restart=always
RestartSec=10
User=root
StandardOutput=append:/var/log/ssh_tunnel/\${tunnel_id}.log
StandardError=append:/var/log/ssh_tunnel/\${tunnel_id}.log
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable "ssh-tunnel-\${tunnel_id}.service"
systemctl start "ssh-tunnel-\${tunnel_id}.service"
echo -e "\${GREEN}Служба создана и запущена!\${NC}"
echo -e "\${CYAN}Управление:\${NC}"
echo -e " sudo systemctl status ssh-tunnel-\${tunnel_id}.service"
echo -e " sudo systemctl restart ssh-tunnel-\${tunnel_id}.service"
read -p "Запустить туннель сейчас? (y/n): " START_NOW
if [[ "\$START_NOW" =~ ^[Yy]\$ ]]; then
autossh -M 0 -N \\
-o "ExitOnForwardFailure=yes" \\
-o "ServerAliveInterval=30" \\
-o "ServerAliveCountMax=3" \\
-R \${REMOTE_PORT}:localhost:\${LOCAL_PORT} \\
\${VPS_USER}@\${VPS_HOST} -p \${VPS_PORT} &
echo -e "\${GREEN}Туннель запущен в фоне!\${NC}"
fi
}
# Заглушки для остальных функций
manage_tunnels() {
echo -e "\${CYAN}Управление туннелями...\${NC}"
echo -e "\${YELLOW}Список туннелей:\${NC}"
ls /etc/ssh_tunnel/*.conf 2>/dev/null | while read conf; do
echo " \$(basename \$conf)"
done
sleep 2
}
setup_autostart() {
echo -e "\${CYAN}Настройка автозапуска...\${NC}"
sleep 1
}
view_logs() {
echo -e "\${CYAN}Просмотр логов...\${NC}"
tail -20 /var/log/ssh_tunnel/*.log 2>/dev/null || echo "Логи отсутствуют"
sleep 2
}
test_connections() {
echo -e "\${CYAN}Тестирование подключений...\${NC}"
check_ssh_connection
sleep 2
}
setup_routing() {
echo -e "\${CYAN}Настройка маршрутизации...\${NC}"
sleep 1
}
setup_ssh_config() {
echo -e "\${CYAN}Настройка SSH...\${NC}"
echo -e "\${YELLOW}Текущий конфиг SSH:\${NC}"
grep -E "^(ClientAlive|TCPKeepAlive|ServerAlive)" /etc/ssh/sshd_config 2>/dev/null || echo "Настройки не найдены"
sleep 2
}
# Главный цикл
while true; do
show_menu
done
@@ -365,19 +720,6 @@ NC='\033[0m'
BOLD='\033[1m'
EOF
# Создание конфигурационного файла
if [ -n "$VPS_HOST" ] && [ -n "$VPS_USER" ]; then
cat > /etc/ssh_tunnel/default.conf << EOF
# Основная конфигурация SSH туннелей
DEFAULT_VPS_HOST="$VPS_HOST"
DEFAULT_VPS_PORT="$VPS_PORT"
DEFAULT_VPS_USER="$VPS_USER"
INSTALL_DATE="$(date '+%Y-%m-%d %H:%M:%S')"
AUTO_RECONNECT="true"
CHECK_INTERVAL="30"
EOF
fi
# Делаем скрипт исполняемым
chmod +x /opt/ssh_tunnel_manager/manager.sh
chmod +x /opt/ssh_tunnel_manager/colors.sh
@@ -534,10 +876,18 @@ ExecStart=/usr/bin/autossh -M 0 -N \\
-o "ExitOnForwardFailure=yes" \\
-o "ServerAliveInterval=30" \\
-o "ServerAliveCountMax=3" \\
-o "StrictHostKeyChecking=no" \\
-o "UserKnownHostsFile=/dev/null" \\
-o "TCPKeepAlive=yes" \\
-o "ConnectTimeout=30" \\
-R \${REMOTE_PORT}:localhost:\${LOCAL_PORT} \\
\${VPS_USER}@\${VPS_HOST} -p \${VPS_PORT}
Restart=always
RestartSec=10
User=root
StandardOutput=append:/var/log/ssh_tunnel/example_ssh.log
StandardError=append:/var/log/ssh_tunnel/example_ssh.log
[Install]
WantedBy=multi-user.target
@@ -549,6 +899,10 @@ EOF
log_message "Пример туннеля создан! Для подключения используйте:" "$GREEN"
echo -e "${BOLD}ssh -p 10022 $VPS_USER@$VPS_HOST${NC}"
echo ""
echo -e "${YELLOW}Проверьте подключение:${NC}"
echo -e " systemctl status ssh-tunnel-example_ssh.service"
echo -e " tail -f /var/log/ssh_tunnel/example_ssh.log"
fi
fi
}
@@ -564,6 +918,7 @@ finish_installation() {
log_message "Итоги установки:" "$CYAN"
echo -e "${GREEN}${NC} Зависимости установлены"
echo -e "${GREEN}${NC} SSH ключи сгенерированы и настроены"
echo -e "${GREEN}${NC} SSH конфигурация улучшена для стабильности"
echo -e "${GREEN}${NC} Основной скрипт установлен: /opt/ssh_tunnel_manager/manager.sh"
echo -e "${GREEN}${NC} Systemd службы настроены"
echo -e "${GREEN}${NC} Автозапуск включен"
@@ -572,7 +927,8 @@ finish_installation() {
if [ -n "$VPS_HOST" ]; then
echo -e "${BOLD}Информация о подключении:${NC}"
echo -e " VPS: $VPS_USER@$VPS_HOST:$VPS_PORT"
echo -e " Публичный ключ: /root/.ssh/id_rsa.pub"
echo -e " SSH ключ: /root/.ssh/id_rsa"
echo -e " Конфиг SSH: /root/.ssh/config"
echo ""
fi
@@ -580,6 +936,7 @@ finish_installation() {
echo -e " ${CYAN}tunnel-manager${NC} - запуск менеджера туннелей"
echo -e " ${CYAN}systemctl status tunnel-monitor${NC} - статус монитора"
echo -e " ${CYAN}journalctl -u tunnel-monitor -f${NC} - просмотр логов"
echo -e " ${CYAN}ssh -p ${VPS_PORT:-22} $VPS_USER@$VPS_HOST${NC} - тестовое подключение"
echo ""
echo -e "${BOLD}Автономная работа гарантирована!${NC}"
echo -e "Система автоматически запустится после перезагрузки."
@@ -612,7 +969,7 @@ main_installation() {
# Устанавливаем зависимости
install_dependencies
# Настраиваем SSH
# Настраиваем SSH (теперь будет запрашивать данные)
setup_ssh
# Устанавливаем основной скрипт