v1.2
Основные исправления:
Интерактивный запрос данных 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:
@@ -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
|
||||
|
||||
# Устанавливаем основной скрипт
|
||||
|
||||
Reference in New Issue
Block a user