Основано на реальном опыте решения проблем с подключением через прокси/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 out | VPN IP заблокирован | Сменить VPN или отключить |
Permission denied | Неверный ключ/пользователь | Проверить ключ и username |
Host key verification failed | Изменился ключ сервера | Удалить из known_hosts |
💡 ПРОФИЛАКТИКА
- **Всегда сохраняйте backup SSH config** перед изменениями
- **Ведите список разрешенных IP** в файрволе
- **Используйте фиксированные VPN серверы** для стабильности
- **Настройте SSH ключи заранее** до включения прокси
- **Документируйте рабочие конфигурации** для команды
Эта инструкция покрывает 95% случаев проблем с SSH при использовании VPN/прокси. Сохраните её - пригодится! 🚀