У меня действительно странная проблема. Я использую Ubuntu Server 12.04 с минимальным набором пакетов: базовая система, sshd и IRC-сервер. Я должен позволить кому-то еще настроить сервер для подключения к своей сети IRC. Тем не менее, они, кажется, падают после двух строк ls или cat.
Как ни странно, это происходит только на этом сервере, и я вообще не смог воспроизвести его, используя PuTTY или ssh-клиент. Где я должен искать, чтобы диагностировать это? auth.log
показывает нормальное соединение и аутентификацию и не дает никаких подробностей о отбрасывании. fail2ban не имеет нарушений с исходным IP-адресом.
Это виртуальная машина с переадресованным портом (это мостовой режим и нормальное сетевое подключение). Я могу подключиться локально, через локальную сеть и из удаленного местоположения с PuTTY без каких-либо проблем. Другой человек может подключиться, используя ssh
в Linux, но сталкивается с разрывом соединения.
Журналы на стороне сервера не показывают ничего необычного.
У меня была эта точная проблема при соединении со старыми 12,04 серверами от LTS14.04 (ранее обновленный от 12,04)
Я нашел, что проблемой является MTU, связанный как после выполнения
sudo ip li set mtu 1480 dev eth0
Проблема уходит..... и возвращается при задержке ее к 1500
(предполагает, что Вы находитесь на проводном eth0 соединении),
Трудно сказать без лучшего описания проблемы (что означает «отбрасывание» означает «разрыв TCP», «TCP RST» - остановленное соединение »), но одна из возможных интерпретаций вашего описания состоит в том, что может быть проблема с обнаружением MTU пути. ...
У меня были странные тайм-ауты ssh, и я решил их, используя следующее:
sudo sysctl -w net.ipv4.tcp_keepalive_time=50 \
net.ipv4.tcp_keepalive_intvl=10 \
net.ipv4.tcp_keepalive_probes=5
Не уверен, поможет ли это, но, возможно, стоит попробовать.
Перед началом убедитесь, что системное время на обоих концах синхронизировано. Это поможет в сравнении позже.
Запустите tcpdump
на обоих концах, отфильтруйте по TCP-порту 22. Вы упоминаете, что клиент использует PuTTY, поэтому я предполагаю, что Windows. Вы можете получить wireshark для Windows, и у него есть возможность захвата, которую вы можете использовать вместо tcpdump
.
Используя tcpdump
, вы сделаете это с чем-то вроде: tcpdump -w/tmp/ssh.pcap -s0 -ieth0 port 22
. С помощью wireshark в Windows вы можете настроить захват, отфильтрованный для порта 22 с помощью графического интерфейса пользователя, а затем сохранить захват на диск.
Теперь откройте оба захвата с помощью wireshark. Найти точку отключения. Вы должны быть в состоянии увидеть, с какого конца инициировано отключение соединения (откуда сначала приходит соединение FIN или RST?)
Вы также можете проверить, является ли сторонний хост (например, маршрутизатор или ISP) мешает соединению. Вы узнаете это, если заметите прибывающий пакет, который никогда не был отправлен, например, с другой стороны. Если это происходит, это может быть пакет RST.