Ping работает, а SSH через VPN не работает: какой этап сломался?
Одна подробная попытка разделяет доступность TCP, транспорт SSH, идентичность хоста, вход пользователя и разрешение сессии, чтобы вы перестали гадать о туннеле.
Ответы ping и отклонённый вход по SSH могут быть верны одновременно, и эта пара не обвиняет туннель. Ответы эха и TCP-соединение к порту 22 — разные тесты с разными селекторами, разными политиками и часто разными назначениями. Зафиксируйте одну намеренную попытку SSH, затем назовите последний этап, которого она достигла. Этот единственный артефакт заменяет дюжину умозрительных изменений конфигурации.
Зафиксируйте одну попытку, а не сеанс тычков
Запустите клиент один раз с подробной диагностикой, отключённым разделением соединений и ограниченным тайм-аутом подключения. Отключение разделения важно, потому что ранее аутентифицированное главное соединение иначе ответит за новую попытку и скроет сбой, который вы преследуете.
ssh -4 -vv -o ControlPath=none -o ConnectTimeout=10 [email protected]
Сохраните назначение, семейство адресов, отметку времени и последнюю несекретную ошибку. Флаг IPv4 также означает, что эта попытка ничего не говорит о пути IPv6 к тому же имени, поэтому не обобщайте по ней. Запишите, откуда сделана попытка. Проверка на шлюзе VPN — не та же точка зрения, что ноутбук за ним, и большинство противоречий в этих заявках происходит от смешения обоих.
Первый и второй этапы: TCP до SSH
Первая граница — достижимость сокета: адрес, порт и маршрут, по которому пакет действительно идёт. Если TCP-соединение никогда не устанавливается, выше ещё ничего нет, а ключи хоста и учётные записи не имеют значения.
nc -vz 10.90.4.20 22
ip route get 10.90.4.20
tcpdump -ni any 'host 10.90.4.20 and port 22'
Сопоставьте запись с попыткой клиента. Уходящий SYN, на который ничего не возвращается, указывает на фильтрацию, селекторы или отсутствующий маршрут на дальней стороне; ответ со сбросом указывает на что-то, что активно отвергает, а не отбрасывает. Вторая граница — сам обмен протокола SSH. TCP-соединение, которое устанавливается и затем застревает, прошло доступность и вошло в переговоры, ответ сервера или обработку пакетов. Это другое расследование, и именно там проблемы, связанные с размером, впервые становятся правдоподобными.
Третий этап: чей ключ ответил
Когда транспорт поднят, клиент проверяет ключ хоста сервера. Отказ здесь — утверждение об идентичности, а не о криптографии: партнёр предъявил ключ, который ваша политика не принимает. Считайте это условием остановки и проверьте вне канала, через консоль или оператора, пересобравшего хост. Удаление запомненной записи ради снятия предупреждения — единственный ярлык, от которого следует отказаться, потому что он уничтожает доказательство того, что что-то ответило неожиданно.
Если хост действительно был пересобран, удалите устаревшую запись только после подтверждения нового отпечатка, и отметьте дату и причину. Следующий инженер столкнётся с тем же предупреждением и нуждается в этом контексте.
Четвёртый и пятый этапы: учётная запись против разрешения
Аутентификация — четвёртая граница. Отклонённые учётные данные означают, что сервер оценил попытку и отклонил её; проверьте учётную запись, тип учётных данных, который принимает сервер, и собственную политику сервера, а не пароль VPN. Пятая граница — авторизация после успешного входа. Аутентифицированному пользователю всё ещё могут отказать в оболочке, команде, подсистеме или перенаправлении, и эти отказы выглядят как сбои для того, кто читает только последнюю строку клиента.
| Last stage reached | What it proves | Where to look next |
|---|---|---|
| No TCP connection | No SSH transport exists | Address, port, route, selectors, filter, listener |
| TCP up, exchange incomplete | Reachability is not the blocker | Server response, negotiation, packet handling |
| Host identity rejected | The peer is not the expected host | Independently verified host key |
| User authentication rejected | The attempt reached authentication | Account, credential and server policy |
| Authenticated, session denied | Login succeeded, the operation did not | Shell, command or forwarding permission |
Остановитесь после пары неудачных попыток пароля. Повторные догадки создают блокировки, которые затем выглядят как второй, несвязанный сбой, и стоят больше времени, чем исходная заявка.
Откат и запись, которую вы ведёте
Меняйте по одной вещи за раз и записывайте, что изменили, прежде чем повторно тестировать. Если изменение ухудшает попытку, немедленно откатите его, а не наслаивайте ещё одну правку. Повторите исходную операцию из исходного клиента и контекста. Успешный вход с другой машины, в другом семействе адресов, не является воспроизведением и не доказывает исправление.
Очистите то, чем делитесь. Подробный вывод клиента может содержать внутренние имена, метки учётных записей, пути к ключам и идентификаторы открытых ключей, поэтому публикуйте поэтапный вывод, а не необработанный след.