Initial
This commit is contained in:
632
install_ssh_tunnel.sh
Normal file
632
install_ssh_tunnel.sh
Normal file
@@ -0,0 +1,632 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Установщик автономного менеджера SSH туннелей
|
||||
# Использование: bash <(curl -s https://raw.githubusercontent.com/ВАШ_ЛОГИН/ВАШ_РЕПОЗИТОРИЙ/main/install_ssh_tunnel.sh)
|
||||
|
||||
# Цвета для вывода
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m'
|
||||
BOLD='\033[1m'
|
||||
|
||||
# Логирование
|
||||
LOG_FILE="/tmp/ssh_tunnel_install.log"
|
||||
|
||||
log_message() {
|
||||
echo -e "${2:-$NC}[$(date '+%Y-%m-%d %H:%M:%S')] $1${NC}" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
clear
|
||||
echo -e "${BOLD}${CYAN}════════════════════════════════════════════════════════════════${NC}"
|
||||
echo -e "${BOLD}${CYAN} УСТАНОВКА АВТОНОМНОГО МЕНЕДЖЕРА SSH ТУННЕЛЕЙ ${NC}"
|
||||
echo -e "${BOLD}${CYAN}════════════════════════════════════════════════════════════════${NC}"
|
||||
echo ""
|
||||
|
||||
# Проверка прав root
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo -e "${RED}ОШИБКА: Этот скрипт требует прав root (sudo).${NC}"
|
||||
echo "Пожалуйста, запустите снова:"
|
||||
echo -e "${BOLD}sudo bash <(curl -s <URL_ВАШЕГО_СКРИПТА>)${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Функция проверки ошибок
|
||||
check_error() {
|
||||
if [ $? -ne 0 ]; then
|
||||
log_message "ОШИБКА: $1" "$RED"
|
||||
log_message "Подробности в логе: $LOG_FILE" "$YELLOW"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Определение дистрибутива
|
||||
detect_distro() {
|
||||
log_message "Определение операционной системы..." "$CYAN"
|
||||
|
||||
if [ -f /etc/os-release ]; then
|
||||
. /etc/os-release
|
||||
OS=$ID
|
||||
VERSION=$VERSION_ID
|
||||
elif [ -f /etc/redhat-release ]; then
|
||||
OS="rhel"
|
||||
VERSION=$(cat /etc/redhat-release | sed 's/.*release \([0-9]\).*/\1/')
|
||||
else
|
||||
OS=$(uname -s)
|
||||
VERSION=$(uname -r)
|
||||
fi
|
||||
|
||||
log_message "Система: $OS $VERSION" "$GREEN"
|
||||
}
|
||||
|
||||
# Установка зависимостей
|
||||
install_dependencies() {
|
||||
log_message "Установка необходимых зависимостей..." "$CYAN"
|
||||
|
||||
case $OS in
|
||||
ubuntu|debian)
|
||||
log_message "Обновление списка пакетов..." "$BLUE"
|
||||
apt-get update 2>&1 | tee -a "$LOG_FILE"
|
||||
|
||||
log_message "Установка autossh, openssh-client и утилит..." "$BLUE"
|
||||
apt-get install -y autossh openssh-client net-tools curl git 2>&1 | tee -a "$LOG_FILE"
|
||||
check_error "Не удалось установить пакеты"
|
||||
;;
|
||||
|
||||
centos|rhel|fedora|rocky|almalinux)
|
||||
log_message "Установка autossh, openssh-clients и утилит..." "$BLUE"
|
||||
if command -v dnf &> /dev/null; then
|
||||
dnf install -y autossh openssh-clients net-tools curl git 2>&1 | tee -a "$LOG_FILE"
|
||||
else
|
||||
yum install -y autossh openssh-clients net-tools curl git 2>&1 | tee -a "$LOG_FILE"
|
||||
fi
|
||||
check_error "Не удалось установить пакеты"
|
||||
;;
|
||||
|
||||
*)
|
||||
log_message "Неизвестный дистрибутив. Попытка установки вручную..." "$YELLOW"
|
||||
# Попытка установить autossh из исходников
|
||||
if ! command -v autossh &> /dev/null; then
|
||||
log_message "Установка autossh вручную..." "$BLUE"
|
||||
curl -sSL http://www.harding.motd.ca/autossh/autossh-1.4g.tgz | tar -xz
|
||||
cd autossh-1.4g || exit 1
|
||||
./configure
|
||||
make
|
||||
make install
|
||||
cd ..
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
log_message "Зависимости успешно установлены!" "$GREEN"
|
||||
}
|
||||
|
||||
# Настройка SSH
|
||||
setup_ssh() {
|
||||
log_message "Настройка SSH системы..." "$CYAN"
|
||||
|
||||
# Создание директорий SSH если их нет
|
||||
mkdir -p /root/.ssh
|
||||
chmod 700 /root/.ssh
|
||||
|
||||
# Запрос данных VPS
|
||||
echo ""
|
||||
echo -e "${BOLD}${YELLOW}════════════════════════════════════════════════════════════════${NC}"
|
||||
echo -e "${BOLD}${YELLOW} НАСТРОЙКА ПОДКЛЮЧЕНИЯ К VPS ${NC}"
|
||||
echo -e "${BOLD}${YELLOW}════════════════════════════════════════════════════════════════${NC}"
|
||||
echo ""
|
||||
|
||||
read -p "Введите IP адрес или доменное имя VPS: " VPS_HOST
|
||||
read -p "Введите порт SSH (по умолчанию 22): " VPS_PORT
|
||||
VPS_PORT=${VPS_PORT:-22}
|
||||
|
||||
echo ""
|
||||
echo -e "${CYAN}Выберите пользователя для подключения:${NC}"
|
||||
echo "1) root (рекомендуется для полного доступа)"
|
||||
echo "2) Другой пользователь"
|
||||
read -p "Ваш выбор [1-2]: " USER_CHOICE
|
||||
|
||||
if [ "$USER_CHOICE" == "1" ]; then
|
||||
VPS_USER="root"
|
||||
echo -e "${YELLOW}Будет использоваться пользователь: root${NC}"
|
||||
else
|
||||
read -p "Введите имя пользователя: " VPS_USER
|
||||
fi
|
||||
|
||||
# Проверка подключения
|
||||
log_message "Проверка подключения к $VPS_USER@$VPS_HOST:$VPS_PORT..." "$BLUE"
|
||||
if timeout 10 bash -c "</dev/tcp/$VPS_HOST/$VPS_PORT" 2>/dev/null; then
|
||||
log_message "Порт $VPS_PORT доступен" "$GREEN"
|
||||
else
|
||||
log_message "Не удалось подключиться к порту $VPS_PORT" "$RED"
|
||||
log_message "Проверьте: 1) Адрес VPS 2) Открыт ли порт 3) Брандмауэр" "$YELLOW"
|
||||
read -p "Продолжить все равно? (y/n): " CONTINUE
|
||||
if [[ ! "$CONTINUE" =~ ^[Yy]$ ]]; then
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Генерация SSH ключа
|
||||
echo ""
|
||||
log_message "Генерация SSH ключа RSA 4096 бит..." "$CYAN"
|
||||
|
||||
if [ -f "/root/.ssh/id_rsa" ]; then
|
||||
echo -e "${YELLOW}SSH ключ уже существует.${NC}"
|
||||
read -p "Сгенерировать новый? (y/n): " GEN_NEW
|
||||
if [[ "$GEN_NEW" =~ ^[Yy]$ ]]; then
|
||||
ssh-keygen -t rsa -b 4096 -N "" -f /root/.ssh/id_rsa -q
|
||||
log_message "Новый SSH ключ сгенерирован" "$GREEN"
|
||||
fi
|
||||
else
|
||||
ssh-keygen -t rsa -b 4096 -N "" -f /root/.ssh/id_rsa -q
|
||||
log_message "SSH ключ сгенерирован" "$GREEN"
|
||||
fi
|
||||
|
||||
# Настройка SSH конфигурации
|
||||
log_message "Настройка конфигурации SSH..." "$BLUE"
|
||||
|
||||
# Создание конфига для root
|
||||
cat > /root/.ssh/config << EOF
|
||||
Host tunnel-vps
|
||||
HostName $VPS_HOST
|
||||
Port $VPS_PORT
|
||||
User $VPS_USER
|
||||
IdentityFile ~/.ssh/id_rsa
|
||||
StrictHostKeyChecking no
|
||||
UserKnownHostsFile /dev/null
|
||||
ServerAliveInterval 30
|
||||
ServerAliveCountMax 3
|
||||
ConnectTimeout 10
|
||||
TCPKeepAlive yes
|
||||
IdentitiesOnly yes
|
||||
|
||||
Host *
|
||||
StrictHostKeyChecking no
|
||||
UserKnownHostsFile /dev/null
|
||||
ServerAliveInterval 30
|
||||
ServerAliveCountMax 3
|
||||
EOF
|
||||
|
||||
chmod 600 /root/.ssh/config
|
||||
|
||||
# Копирование ключа на VPS
|
||||
echo ""
|
||||
log_message "Копирование SSH ключа на VPS ($VPS_USER@$VPS_HOST)..." "$CYAN"
|
||||
echo -e "${YELLOW}Если запросит пароль, введите пароль от $VPS_USER на VPS${NC}"
|
||||
echo ""
|
||||
|
||||
# Пытаемся скопировать ключ
|
||||
if ssh-copy-id -p "$VPS_PORT" -i /root/.ssh/id_rsa.pub "$VPS_USER@$VPS_HOST" 2>&1 | tee -a "$LOG_FILE"; then
|
||||
log_message "SSH ключ успешно скопирован на VPS!" "$GREEN"
|
||||
else
|
||||
log_message "Не удалось скопировать ключ через ssh-copy-id" "$YELLOW"
|
||||
log_message "Попытка ручного копирования..." "$BLUE"
|
||||
|
||||
# Альтернативный метод
|
||||
if [ -f "/root/.ssh/id_rsa.pub" ]; then
|
||||
PUB_KEY=$(cat /root/.ssh/id_rsa.pub)
|
||||
echo "Попытка добавить ключ вручную..."
|
||||
|
||||
# Пробуем добавить через SSH команду
|
||||
ssh -p "$VPS_PORT" "$VPS_USER@$VPS_HOST" \
|
||||
"mkdir -p ~/.ssh && chmod 700 ~/.ssh && \
|
||||
echo '$PUB_KEY' >> ~/.ssh/authorized_keys && \
|
||||
chmod 600 ~/.ssh/authorized_keys" 2>&1 | tee -a "$LOG_FILE"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
log_message "Ключ успешно добавлен вручную!" "$GREEN"
|
||||
else
|
||||
log_message "Не удалось добавить ключ. Сделайте это вручную:" "$RED"
|
||||
echo ""
|
||||
echo -e "${BOLD}Публичный ключ:${NC}"
|
||||
cat /root/.ssh/id_rsa.pub
|
||||
echo ""
|
||||
echo -e "${YELLOW}Добавьте этот ключ в ~/.ssh/authorized_keys на VPS${NC}"
|
||||
read -p "Нажмите Enter после добавления ключа..."
|
||||
fi
|
||||
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 "Тестовое подключение прошло успешно!" "$GREEN"
|
||||
else
|
||||
log_message "Тестовое подключение не удалось" "$YELLOW"
|
||||
read -p "Продолжить установку? (y/n): " CONTINUE_INSTALL
|
||||
if [[ ! "$CONTINUE_INSTALL" =~ ^[Yy]$ ]]; then
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Настройка для не-root пользователей (если запущено не из-под root)
|
||||
if [[ $EUID -eq 0 ]] && [ -d "/home/" ]; then
|
||||
log_message "Настройка SSH для всех пользователей системы..." "$CYAN"
|
||||
|
||||
# Копируем конфиг для всех домашних директорий
|
||||
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"
|
||||
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
|
||||
fi
|
||||
}
|
||||
|
||||
# Установка основного скрипта
|
||||
install_main_script() {
|
||||
log_message "Установка основного скрипта управления туннелями..." "$CYAN"
|
||||
|
||||
# Создание директорий
|
||||
mkdir -p /opt/ssh_tunnel_manager
|
||||
mkdir -p /var/log/ssh_tunnel
|
||||
mkdir -p /etc/ssh_tunnel
|
||||
|
||||
# Скачивание или создание основного скрипта
|
||||
# Здесь должен быть ваш основной скрипт из Git репозитория
|
||||
# Для примера создадим базовую версию
|
||||
|
||||
cat > /opt/ssh_tunnel_manager/manager.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
|
||||
# Основной скрипт менеджера SSH туннелей
|
||||
# Версия 2.0 - Полностью автономный
|
||||
|
||||
# Конфигурация
|
||||
CONFIG_DIR="/etc/ssh_tunnel"
|
||||
LOG_DIR="/var/log/ssh_tunnel"
|
||||
SERVICE_DIR="/etc/systemd/system"
|
||||
SCRIPT_DIR="/opt/ssh_tunnel_manager"
|
||||
|
||||
# Цвета
|
||||
source "$SCRIPT_DIR/colors.sh" 2>/dev/null || {
|
||||
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'; CYAN='\033[0;36m'; NC='\033[0m'; BOLD='\033[1m'
|
||||
}
|
||||
|
||||
# Основное меню
|
||||
show_menu() {
|
||||
clear
|
||||
echo -e "${BOLD}${CYAN}════════════════════════════════════════════════════════════════${NC}"
|
||||
echo -e "${BOLD}${CYAN} АВТОНОМНЫЙ МЕНЕДЖЕР SSH ТУННЕЛЕЙ v2.0 ${NC}"
|
||||
echo -e "${BOLD}${CYAN}════════════════════════════════════════════════════════════════${NC}"
|
||||
echo ""
|
||||
|
||||
# Проверка статуса
|
||||
check_system_status
|
||||
|
||||
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
|
||||
1) create_tunnel ;;
|
||||
2) quick_ssh_tunnel ;;
|
||||
3) manage_tunnels ;;
|
||||
4) setup_autostart ;;
|
||||
5) view_logs ;;
|
||||
6) test_connections ;;
|
||||
7) setup_routing ;;
|
||||
8) exit 0 ;;
|
||||
*) echo -e "${RED}Неверный выбор${NC}"; sleep 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Остальные функции скрипта...
|
||||
# Здесь должен быть полный код вашего менеджера туннелей
|
||||
|
||||
# Запуск меню
|
||||
while true; do
|
||||
show_menu
|
||||
done
|
||||
EOF
|
||||
|
||||
# Создание файла с цветами
|
||||
cat > /opt/ssh_tunnel_manager/colors.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
# Файл цветов для менеджера туннелей
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
PURPLE='\033[0;35m'
|
||||
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
|
||||
|
||||
# Создание символической ссылки
|
||||
ln -sf /opt/ssh_tunnel_manager/manager.sh /usr/local/bin/tunnel-manager
|
||||
|
||||
log_message "Основной скрипт установлен в /opt/ssh_tunnel_manager/" "$GREEN"
|
||||
}
|
||||
|
||||
# Настройка systemd служб
|
||||
setup_systemd_services() {
|
||||
log_message "Настройка systemd служб для автономной работы..." "$CYAN"
|
||||
|
||||
# Основная служба мониторинга
|
||||
cat > /etc/systemd/system/tunnel-monitor.service << EOF
|
||||
[Unit]
|
||||
Description=Мониторинг и восстановление SSH туннелей
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/opt/ssh_tunnel_manager/monitor.sh
|
||||
Restart=always
|
||||
RestartSec=30
|
||||
User=root
|
||||
|
||||
StandardOutput=append:/var/log/ssh_tunnel/monitor.log
|
||||
StandardError=append:/var/log/ssh_tunnel/monitor.log
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
# Скрипт мониторинга
|
||||
cat > /opt/ssh_tunnel_manager/monitor.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
# Скрипт мониторинга туннелей
|
||||
|
||||
LOG_FILE="/var/log/ssh_tunnel/monitor.log"
|
||||
CONFIG_DIR="/etc/ssh_tunnel"
|
||||
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
|
||||
}
|
||||
|
||||
check_tunnel() {
|
||||
local config_file="$1"
|
||||
local tunnel_name=$(basename "$config_file" .conf)
|
||||
|
||||
if [ ! -f "$config_file" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
source "$config_file"
|
||||
|
||||
# Проверяем, работает ли туннель
|
||||
if ps aux | grep -v grep | grep -q "autossh.*$REMOTE_PORT.*$VPS_HOST"; then
|
||||
# Проверяем доступность порта
|
||||
if timeout 2 nc -z localhost "$LOCAL_PORT" 2>/dev/null; then
|
||||
log "Туннель $tunnel_name: OK"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
log "Туннель $tunnel_name: FAILED - перезапуск"
|
||||
|
||||
# Перезапускаем службу
|
||||
if systemctl is-active --quiet "ssh-tunnel-$tunnel_name.service" 2>/dev/null; then
|
||||
systemctl restart "ssh-tunnel-$tunnel_name.service"
|
||||
else
|
||||
# Запускаем туннель напрямую
|
||||
/usr/bin/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}" &
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
log "Запуск монитора SSH туннелей"
|
||||
|
||||
while true; do
|
||||
# Проверяем все конфигурации
|
||||
for config in "$CONFIG_DIR"/*.conf; do
|
||||
if [ -f "$config" ]; then
|
||||
check_tunnel "$config"
|
||||
fi
|
||||
done
|
||||
|
||||
sleep 60
|
||||
done
|
||||
EOF
|
||||
|
||||
chmod +x /opt/ssh_tunnel_manager/monitor.sh
|
||||
|
||||
# Создание таймера для периодической проверки
|
||||
cat > /etc/systemd/system/tunnel-check.timer << EOF
|
||||
[Unit]
|
||||
Description=Периодическая проверка SSH туннелей
|
||||
|
||||
[Timer]
|
||||
OnBootSec=5min
|
||||
OnUnitActiveSec=5min
|
||||
AccuracySec=1min
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
EOF
|
||||
|
||||
# Включение служб
|
||||
systemctl daemon-reload
|
||||
systemctl enable tunnel-monitor.service
|
||||
systemctl enable tunnel-check.timer
|
||||
systemctl start tunnel-monitor.service
|
||||
systemctl start tunnel-check.timer
|
||||
|
||||
log_message "Systemd службы настроены и запущены" "$GREEN"
|
||||
}
|
||||
|
||||
# Создание примера туннеля
|
||||
create_example_tunnel() {
|
||||
log_message "Создание примера SSH туннеля..." "$CYAN"
|
||||
|
||||
if [ -n "$VPS_HOST" ] && [ -n "$VPS_USER" ]; then
|
||||
read -p "Создать пример туннеля для SSH (порт 22 -> 10022)? (y/n): " CREATE_EXAMPLE
|
||||
|
||||
if [[ "$CREATE_EXAMPLE" =~ ^[Yy]$ ]]; then
|
||||
cat > /etc/ssh_tunnel/example_ssh.conf << EOF
|
||||
# Пример туннеля для SSH доступа
|
||||
TUNNEL_NAME="example_ssh"
|
||||
VPS_HOST="$VPS_HOST"
|
||||
VPS_PORT="$VPS_PORT"
|
||||
VPS_USER="$VPS_USER"
|
||||
LOCAL_PORT="22"
|
||||
REMOTE_PORT="10022"
|
||||
ENABLED="true"
|
||||
EOF
|
||||
|
||||
# Создание службы для примера
|
||||
cat > /etc/systemd/system/ssh-tunnel-example_ssh.service << EOF
|
||||
[Unit]
|
||||
Description=Пример SSH туннеля (22->10022)
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
EnvironmentFile=/etc/ssh_tunnel/example_ssh.conf
|
||||
ExecStart=/usr/bin/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}
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl enable ssh-tunnel-example_ssh.service
|
||||
systemctl start ssh-tunnel-example_ssh.service
|
||||
|
||||
log_message "Пример туннеля создан! Для подключения используйте:" "$GREEN"
|
||||
echo -e "${BOLD}ssh -p 10022 $VPS_USER@$VPS_HOST${NC}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Завершение установки
|
||||
finish_installation() {
|
||||
echo ""
|
||||
echo -e "${BOLD}${GREEN}════════════════════════════════════════════════════════════════${NC}"
|
||||
echo -e "${BOLD}${GREEN} УСТАНОВКА УСПЕШНО ЗАВЕРШЕНА! ${NC}"
|
||||
echo -e "${BOLD}${GREEN}════════════════════════════════════════════════════════════════${NC}"
|
||||
echo ""
|
||||
|
||||
log_message "Итоги установки:" "$CYAN"
|
||||
echo -e "${GREEN}✓${NC} Зависимости установлены"
|
||||
echo -e "${GREEN}✓${NC} SSH ключи сгенерированы и настроены"
|
||||
echo -e "${GREEN}✓${NC} Основной скрипт установлен: /opt/ssh_tunnel_manager/manager.sh"
|
||||
echo -e "${GREEN}✓${NC} Systemd службы настроены"
|
||||
echo -e "${GREEN}✓${NC} Автозапуск включен"
|
||||
echo ""
|
||||
|
||||
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 ""
|
||||
fi
|
||||
|
||||
echo -e "${BOLD}Команды для управления:${NC}"
|
||||
echo -e " ${CYAN}tunnel-manager${NC} - запуск менеджера туннелей"
|
||||
echo -e " ${CYAN}systemctl status tunnel-monitor${NC} - статус монитора"
|
||||
echo -e " ${CYAN}journalctl -u tunnel-monitor -f${NC} - просмотр логов"
|
||||
echo ""
|
||||
echo -e "${BOLD}Автономная работа гарантирована!${NC}"
|
||||
echo -e "Система автоматически запустится после перезагрузки."
|
||||
echo ""
|
||||
echo -e "${YELLOW}Полный лог установки: $LOG_FILE${NC}"
|
||||
echo ""
|
||||
|
||||
# Запрос на перезагрузку
|
||||
read -p "Перезагрузить систему для применения всех настроек? (y/n): " REBOOT_NOW
|
||||
if [[ "$REBOOT_NOW" =~ ^[Yy]$ ]]; then
|
||||
log_message "Перезагрузка системы по запросу пользователя..." "$YELLOW"
|
||||
echo -e "${YELLOW}Система перезагрузится через 5 секунд...${NC}"
|
||||
sleep 5
|
||||
reboot
|
||||
else
|
||||
echo ""
|
||||
echo -e "${GREEN}Для запуска менеджера выполните:${NC}"
|
||||
echo -e "${BOLD}tunnel-manager${NC}"
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
# Главная функция установки
|
||||
main_installation() {
|
||||
log_message "Начало установки автономного менеджера SSH туннелей" "$CYAN"
|
||||
|
||||
# Определяем дистрибутив
|
||||
detect_distro
|
||||
|
||||
# Устанавливаем зависимости
|
||||
install_dependencies
|
||||
|
||||
# Настраиваем SSH
|
||||
setup_ssh
|
||||
|
||||
# Устанавливаем основной скрипт
|
||||
install_main_script
|
||||
|
||||
# Настраиваем systemd службы
|
||||
setup_systemd_services
|
||||
|
||||
# Создаем пример туннеля
|
||||
create_example_tunnel
|
||||
|
||||
# Завершаем установку
|
||||
finish_installation
|
||||
}
|
||||
|
||||
# Запуск установки
|
||||
main_installation
|
||||
Reference in New Issue
Block a user