Хостинг

ПОЛНАЯ ИНСТРУКЦИЯ: SSH VS VPN/PROXY - ДИАГНОСТИКА И РЕШЕНИЯ

ПОЛНАЯ ИНСТРУКЦИЯ: SSH VS VPN/PROXY - ДИАГНОСТИКА И РЕШЕНИЯ

Основано на реальном опыте решения проблем с подключением через прокси/VPN


🚨 ТИПИЧНАЯ СИТУАЦИЯ

 Вы включили VPN или прокси, пытаетесь подключиться по SSH к серверу, но получаете ошибки:


- `Connection refused`

- `Connection timed out`

- `Too many authentication failures`

- `Permission denied`

Проблема: Сервер видит другой IP, не тот с которого вы реально подключаетесь.


🔍 ЭТАП 1: ДИАГНОСТИКА - ОПРЕДЕЛЯЕМ РЕАЛЬНУЮ КАРТИНУ

1.1 Узнайте свои IP адреса

# Ваш реальный IP (без VPN/прокси)
curl -s ipinfo.io/ip

# IP который видят серверы (с VPN/прокси)
curl -s ifconfig.me

# Дополнительная информация
curl -s ipinfo.io

Пример вывода:

Реальный IP: 000.000.000.000 (ваш провайдер)
Прокси IP: 000.000.000.000 (VPN/прокси сервер)

1.2 Проверьте доступность хоста

# Базовая проверка
ping -c 3 000.000.253.120

# Проверка конкретного порта SSH
nc -zv 000.000.253.124 22
# или
telnet 000.000.253.124 22

1.3 Тестируйте SSH подключение с диагностикой

# Подробный вывод для диагностики
ssh -vvv -o ConnectTimeout=10 user@server

# Пример с таймаутом
timeout 15 ssh -v user@000.000.256.120

🛡️ ЭТАП 2: ПРОБЛЕМЫ С ФАЙРВОЛОМ НА СЕРВЕРЕ

2.1 Определите тип файрвола на сервере

 Если у вас есть доступ к серверу через другой канал (консоль хостинга, VNC):
# Проверяем какой файрвол активен
systemctl status iptables
systemctl status firewalld
systemctl status ufw

# Смотрим правила
iptables -L INPUT -n | grep 22
firewall-cmd --list-all
ufw status

2.2 Добавляем IP в whitelist

Для iptables (CentOS/RHEL):

# Добавляем ПРОКСИ IP (который видит сервер)
iptables -I INPUT -s 000.000.000.000 -p tcp --dport 22 -j ACCEPT

# И ваш реальный IP (на случай отключения прокси)
iptables -I INPUT -s 144.144.248.546 -p tcp --dport 22 -j ACCEPT

# Сохраняем (CentOS 7+)
iptables-save > /etc/sysconfig/iptables

# Проверяем
iptables -L INPUT -n | grep 22

Для firewalld (CentOS 8+):

# Добавляем IP прокси
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="34.444.444.4" port protocol="tcp" port="22" accept'

# Добавляем реальный IP
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="144.144.45.45" port protocol="tcp" port="22" accept'

# Применяем
firewall-cmd --reload

# Проверяем
firewall-cmd --list-all

Для UFW (Ubuntu):

# Разрешаем оба IP
ufw allow from 38.180.244.6 to any port 22
ufw allow from 109.195.28.56 to any port 22

# Проверяем
ufw status numbered

🌐 ЭТАП 3: НАСТРОЙКА SSH КЛИЕНТА ДЛЯ ПРОКСИ

3.1 Простое решение - SSH config

 Создайте/отредактируйте `~/.ssh/config`:
# Для подключения через прокси
Host bitrix-server
    HostName 000.000.253.120
    User bitrix
    Port 22
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes
    ConnectTimeout 30
    ServerAliveInterval 60
    StrictHostKeyChecking no

3.2 SSH через HTTP/SOCKS прокси

 Если VPN не помогает, используйте прокси:
Host bitrix-server-proxy
    HostName 000.000.253.120
    User bitrix
    Port 22
    ProxyCommand nc -X connect -x proxy-server:proxy-port %h %p
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes

3.3 SSH через другой сервер (ProxyJump)

Host bitrix-server-jump
    HostName 245.145.453.145
    User bitrix
    Port 22
    ProxyJump proxy-user@proxy-server.com
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes

🚀 ЭТАП 4: ПРАКТИЧЕСКИЕ СЦЕНАРИИ РЕШЕНИЯ

Сценарий 1: VPN заблокирован хостером

# Отключите VPN
# Используйте прямое подключение
ssh bitrix@000.000.253.120

# Если работает - значит хостер блокирует VPN IP
# Добавьте VPN IP в whitelist через панель хостинга

Сценарий 2: Динамический IP + VPN

# Скрипт для автоматического обновления IP
cat > update-firewall-ip.sh << 'EOF'
#!/bin/bash
CURRENT_IP=$(curl -s ifconfig.me)
echo "Текущий IP: $CURRENT_IP"

# Обновляем на сервере (требует доступа)
ssh root@server "iptables -I INPUT -s $CURRENT_IP -p tcp --dport 22 -j ACCEPT"
ssh root@server "iptables-save > /etc/sysconfig/iptables"
EOF

chmod +x update-firewall-ip.sh

Сценарий 3: Множественные ключи SSH

# Очищаем ssh-agent
ssh-add -D

# Добавляем только нужный ключ
ssh-add ~/.ssh/id_rsa

# Или используем конкретный ключ
ssh -i ~/.ssh/specific-key user@server

🔧 ЭТАП 5: АВТОМАТИЧЕСКАЯ ДИАГНОСТИКА

5.1 Скрипт диагностики SSH+Proxy

cat > ssh-proxy-diagnostic.sh << 'EOF'
#!/bin/bash

echo "=== SSH + PROXY ДИАГНОСТИКА ==="
echo ""

# Проверяем IP
echo "1. ВАШИ IP АДРЕСА:"
echo "Реальный IP: $(curl -s --max-time 5 ipinfo.io/ip 2>/dev/null || echo 'Недоступен')"
echo "Видимый IP: $(curl -s --max-time 5 ifconfig.me 2>/dev/null || echo 'Недоступен')"
echo ""

# Проверяем сервер
SERVER=${1:-"000.000.000.000"}
echo "2. ПРОВЕРКА СЕРВЕРА $SERVER:"
if ping -c 2 -W 3 $SERVER &>/dev/null; then
    echo "✅ Пинг: OK"
else
    echo "❌ Пинг: FAIL"
fi

if nc -zv -w 3 $SERVER 22 &>/dev/null; then
    echo "✅ SSH порт 22: OK"
else
    echo "❌ SSH порт 22: FAIL"
fi
echo ""

# Проверяем SSH ключи
echo "3. SSH КЛЮЧИ:"
if [ -f ~/.ssh/id_rsa ]; then
    echo "✅ Приватный ключ: есть"
else
    echo "❌ Приватный ключ: нет"
fi

AGENT_KEYS=$(ssh-add -l 2>/dev/null | wc -l)
echo "SSH-agent ключей: $AGENT_KEYS"
echo ""

# Проверяем ssh config
echo "4. SSH CONFIG:"
if [ -f ~/.ssh/config ]; then
    if grep -q "$SERVER" ~/.ssh/config; then
        echo "✅ Конфиг для $SERVER: есть"
    else
        echo "⚠️  Конфиг для $SERVER: нет"
    fi
else
    echo "⚠️  Файл ~/.ssh/config: нет"
fi
echo ""

echo "5. РЕКОМЕНДАЦИИ:"
echo "• Добавьте в ~/.ssh/config блок с IdentitiesOnly yes"
echo "• Проверьте whitelist IP на сервере"
echo "• Попробуйте отключить VPN/прокси"
echo "• Используйте ssh -i для конкретного ключа"
EOF

chmod +x ssh-proxy-diagnostic.sh

# Запуск
./ssh-proxy-diagnostic.sh 000.000.000.000

📋 ЭТАП 6: CHECKLIST РЕШЕНИЙ ПО ПОРЯДКУ

Быстрая диагностика (5 минут):

- ☐ Узнать свой реальный и прокси IP

- ☐ Проверить ping и порт 22 сервера

- ☐ Попробовать SSH с verbose (`ssh -vvv`)

- ☐ Отключить VPN/прокси и попробовать снова

Настройка на сервере (если есть доступ):

- ☐ Добавить прокси IP в iptables/firewalld

- ☐ Добавить реальный IP в файрвол

- ☐ Сохранить правила файрвола

- ☐ Перезапустить SSH сервис

Настройка SSH клиента:

- ☐ Создать/обновить ~/.ssh/config

- ☐ Добавить `IdentitiesOnly yes`

- ☐ Очистить ssh-agent от лишних ключей

- ☐ Проверить права на ключи (chmod 600)

Альтернативные решения:

- ☐ Использовать ProxyJump через другой сервер

- ☐ Настроить SSH туннель

- ☐ Попробовать другой VPN/прокси

- ☐ Обратиться в поддержку хостера

🎯 ТИПИЧНЫЕ ОШИБКИ И РЕШЕНИЯ

ОшибкаПричинаРешение
Connection refusedФайрвол блокирует IPДобавить IP в whitelist
Too many authentication failuresМного SSH ключейIdentitiesOnly yes в config
Connection timed outVPN IP заблокированСменить VPN или отключить
Permission deniedНеверный ключ/пользовательПроверить ключ и username
Host key verification failedИзменился ключ сервераУдалить из known_hosts

💡 ПРОФИЛАКТИКА

- **Всегда сохраняйте backup SSH config** перед изменениями

- **Ведите список разрешенных IP** в файрволе

- **Используйте фиксированные VPN серверы** для стабильности

- **Настройте SSH ключи заранее** до включения прокси

- **Документируйте рабочие конфигурации** для команды

 Эта инструкция покрывает 95% случаев проблем с SSH при использовании VPN/прокси. Сохраните её - пригодится! 🚀