PuTTY вылетает при выходе и требует перезагрузки компьютера

954
felwithe

PuTTY падает, когда программа пытается выйти. Когда он падает, окно замерзнет и не закроется, несмотря ни на что. Принудительное закрытие не будет работать, диспетчер задач не будет работать. pskillиз pstools (используя командную строку администратора) не имеет никакого эффекта - он говорит, что процесс был убит, но остается. Ничто не заставит окно исчезнуть, кроме перезагрузки компьютера.

Это происходило в течение нескольких недель, возможно, из-за недавнего обновления Windows, но это только предположение. Это происходит не каждый раз, но, возможно, в 50% случаев. Он дает сбой, независимо от того, вызывается ли он вручную, введя команду «exit» или «logout», или когда он завершает сам, потому что компьютер перешел в спящий режим.

Это происходит только когда я использую туннелирование портов. У меня всегда открыто несколько окон PuTTY, и единственное, что вылетает, это окно с открытым туннелем порта.

Перед самым последним сбоем я открыл журнал PuTTY, чтобы посмотреть, что там написано. Последняя строка была «Состояние отправки команды 0 отправлено сервером», что кажется нормальным.

server exit status 0

Вот скриншот моих настроек туннелирования портов, на случай, если это уместно:

port tunnel D9090

Вот окно ошибки Windows, которое идентифицирует тип ошибки как «AppHangB1»:

enter image description here

Google дал мне ноль результатов. Поиск такого типа сбоя показал мне, что это часто вызвано ошибочным драйвером, так что это один из возможных путей, если кто-нибудь знает, что я должен попытаться обновить / откатить.

Я обновил PuTTY до последней версии безрезультатно. Я не пытался обновить удаленный компьютер (которым я управляю) или мой маршрутизатор, но я надеюсь, что ни один из них не связан с таким сбоем, который, похоже, связан с самой Windows.

Windows 7


Обновить

Я запустил предложенные средства отладки, которые генерировали дамп памяти и анализировали его. Это довольно много информации, поэтому я вставил ее в jsfiddle, который вы можете увидеть здесь . Я процитировал резюме ниже, но, пожалуйста, смотрите эту страницу для полного отчета, потому что это довольно много информации.

Описание: Обнаружена возможная блокировка или утечка критической секции в 0x041916d8, принадлежащей потоку 0 в putty.exe__PID__7768__Date__08_14_2018__Time_02_26_52PM__311__Manual Dump.dmp

Влияние этой блокировки: 25.00% заблокированных тем (Тем 2)

Следующие функции пытаются войти в этот критический раздел

mswsock! SockAsyncSelectCompletion + 2a

Следующие модули связаны с этим критическим разделом:

C: \ WINDOWS \ System32 \ mswsock.dll от корпорации Microsoft


Обновление через 3 недели

Прошло почти месяц без сбоев, и за это время произошло еще одно обновление Windows. Сроки слишком случайны; Я думаю, что это должно быть вызвано обновлением Windows летом, возможно, в июле, и исправлено в августовском обновлении.

5
Вы пытались удалить и переустановить [самую последнюю версию] (https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) PuTTY _ (не обновлять, а фактически удалять, перезагружать, повторно -install) _? Если да, пробовали ли вы [версию моментального снимка] (https://www.chiark.greenend.org.uk/~sgtatham/putty/snapshot.html)? Вы подали [Отчет об ошибке] (https://www.chiark.greenend.org.uk/~sgtatham/putty/feedback.html) на сайте PuTTY? JW0914 5 лет назад 0
Попробуйте ввести `enter ~ .` (enter-tilde-dot) перед вводом` exit` или когда PuTTY зависает. Вопросы: Как именно вы выходите из PuTTY и используете ли вы команду `exit`? Какой у вас MTU с обеих сторон? harrymc 5 лет назад 0
@harrymc: сбой происходит, когда я набираю `exit`,` logout` или когда PuTTY закрывается самостоятельно, потому что компьютер переходит в спящий режим. Обычно я использую `выход`. Я не знаю, каков мой MTU; Я не знаком с этим термином. `enter ~ .` не является командой, распознаваемой сервером, felwithe 5 лет назад 0
Хотя я не очень хорошо знаком с туннелированием портов, есть ли что-то на «другом конце», которое полагается на соединение, которое вы разрываете при выполнении команды «exit» или «logout»? Возможно, замазка сталкивается с ошибкой, потому что при выходе клиента из POV замазки «другой конец» пытается восстановить соединение, что вызывает проблему. (Просто мысль, как я работаю со шпатлевкой, только не туннелирование портов.) Также просто для пояснения туннелирования портов вы имеете в виду переадресацию портов? RickwhoPrograms 5 лет назад 0
Я предложил комбинацию `enter ~ .`, так как она используется ssh для локального сброса соединения. Очевидно, что на соединении висит локальная замазка, возможно, потому, что другая сторона неправильно закрывает его. Не могли бы вы рассказать нам, какое программное обеспечение находится на другой стороне, а какая версия на обеих сторонах. harrymc 5 лет назад 0
Предложение: в настройках конфигурации попробуйте изменить настройку «Закрыть окно при выходе». Вы также можете попробовать другой вариант: [KiTTY] (http://www.9bis.net/kitty/), [MobaXterm] (https://mobaxterm.mobatek.net/features.html), [Bitvise] (https: //www.bitvise.com/ssh-client). harrymc 5 лет назад 0
Я предполагаю, что вы используете туннель в качестве SOCKS согласно вашим скриншотам. Вы закрывали приложение, которое использует туннель (браузер) перед выходом? Вы используете какой-нибудь антивирус? Alex 5 лет назад 0
@ Алекс Да, я закрываю браузер перед выходом (Firefox). Когда PuTTY закрывается из-за того, что компьютер перешел в спящий режим, Firefox в этот момент был закрыт не менее часа, поэтому я не думаю, что он все еще мог использовать соединение. felwithe 5 лет назад 0
@harrymc Согласно журналу PuTTY, это `Версия сервера: SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.10`. Это то, что вы ищете? Интересно, что следующая строка: «Мы считаем, что в удаленной версии есть ошибка запроса канала SSH-2». Вот скриншот (который, к сожалению, обрезает концы предложений): https://i.imgur.com/lGRwcZe.png felwithe 5 лет назад 0
Поскольку вы подключаетесь к серверу Linux, вам также следует попытаться выйти через `Ctrl + D`, поскольку в Linux это действует как EOF и, следовательно, соединение будет разорвано. 3D1T0R 5 лет назад 0
Я бы также порекомендовал вам попробовать и KiTTY, так как это форк PuTTY. 3D1T0R 5 лет назад 0
См. Также: Эта известная ошибка PuTTY, которая может или не может быть связана ... [unclean-close-crash: Сообщения о сбоях при нечистом закрытии (связанных с переадресацией портов?)] (Https: //www.chiark.greenend. org.uk/~sgtatham/putty/wishlist/unclean-close-crash.html) 3D1T0R 5 лет назад 0
@ JW0914, я пытался удалить, перезагрузить и переустановить, и получал надежду, потому что в течение пары дней не было сбоев, но потом это повторилось прошлой ночью. felwithe 5 лет назад 0
@ JW0914, когда я переустанавливал PuTTY, я заметил, что у него все еще были мои старые настройки, что, я думаю, означает, что его значения реестра не были удалены. Есть ли способ удалить его, включая значения реестра? (Или это не имеет значения? Я пробую все, что могу придумать.) felwithe 5 лет назад 0
@RickwhoPrograms Я на самом деле не очень хорошо знаю разницу между переадресацией портов и туннелированием. Я следовал руководству по использованию Firefox через прокси-сервер. Сначала я подключаюсь к серверу с помощью PuTTY, используя настройки на снимке экрана выше (вкладка «Соединение / SSH / туннели», порт 9090 динамический или D9090). Затем Firefox использует это соединение со своими настройками прокси-сервера, такими как хост SOCKS 127.0.0.1, порт 9090. Вот снимок экрана: https://i.imgur.com/0Wqb6zR.png felwithe 5 лет назад 0
@felwithe Все значения реестра PuTTY содержат ваши сохраненные профили, списки переходов сессий и открытые открытые ключи хоста ... Расположение реестра: `HKCU \ Software \ SimonTatham \ PuTTY`. Если вы считаете, что изменили настройки профиля по умолчанию и хотите сбросить профиль по умолчанию на значение по умолчанию, удалите все ключи в «Сеансах», содержащие «по умолчанию» в имени ключа. Я также рекомендовал бы подать [отчет об ошибке] (https://www.chiark.greenend.org.uk/~sgtatham/putty/feedback.html) на сайте PuTTY. JW0914 5 лет назад 0
@felwithe У вас установлено какое-либо стороннее программное обеспечение для брандмауэра или для проверки на вирусы? Такое поведение звучит как что-то, пытающееся перехватить сетевые соединения в ядре, но плохо справляющееся с этим делом ... Anon 5 лет назад 0
@ Anon 4 Только Malwarebytes. felwithe 5 лет назад 0
@felwithe Если вы временно отключите Malwarebytes, проблема станет лучше? Anon 5 лет назад 0
Конечно, есть люди, которые знают об отладке Windows больше, чем я, но ... Он застрял на "ws2_32! Closesocket + cd", который вызывается из: "putty + a1050" - обратите внимание, что у 'putty + ..... "нет функции name, вы захотите скомпилировать Putty ** с ** отладочными символами, чтобы вам сообщили имя функции и номер строки. Это выглядит *** как будто у вас есть вызов, чтобы закрыть сокет, и он не возвращается. Без исходного кода можно догадаться, в чем проблема. Если вы мастер в языке asm и вызовах Window, вы можете загрузить Putty.exe в отладчик и посмотреть код, приводящий к вызову на a1050. Rob 5 лет назад 1

4 ответа на вопрос

2
harrymc

В настройках конфигурации PuTTY настройка «Закрыть окно при выходе» может принимать участие в проблеме, поэтому попробуйте проверить другие доступные настройки.

Вы также можете попробовать альтернативный бесплатный продукт, один из: KiTTY, MobaXterm или Bitvise .

Если одна из альтернатив работает для вас, то сначала у вас есть решение этой проблемы. Во-вторых, сама проблема, вероятно, заключается в некоторой трудности в протоколе связи PuTTY с удаленным компьютером, и вы должны сообщить о проблеме разработчикам.

Однако, если ни одна из альтернатив не работает для вас, проблема, вероятно, не на вашей стороне. Вам следует проверить настройки SSH-сервера на удаленном компьютере, попытаться отладить его и опубликовать здесь журналы трассировки, если вы хотите, чтобы мы посмотрели. Если у вас нет контроля над удаленным компьютером, сообщите о проблеме его администратору.

может ли сервер, пытающийся подключиться к своему сеансу замазки, стать причиной проблемы, о которой уже упоминалось несколько раз? Это моя догадка, но так как я мало работаю с туннелированием портов (переадресация?), Я не уверен. Также, если это так, каким будет потенциальный обходной путь? Будет ли какой-либо способ принудительно прервать «попытку подключения», если хост отключится с удаленной стороны? RickwhoPrograms 5 лет назад 0
Недостаточно информации о вашей настройке, чтобы ответить (и не уверен, что смогу даже тогда). Я полагаю, что PuTTY зависает, ожидая, пока сервер подтвердит запрос на закрытое соединение, и что проблема в состоянии гонки, когда одна из сторон использует неправильный тайм-аут. Это может объяснить, почему проблема носит прерывистый характер - сервер мог закрыть соединение на своей стороне, просто в этом пропустил PuTTY, ожидая ответа, который никогда не приходит, и закрытое соединение. В TCP закрытие сокета на одной стороне не сообщается другой, поэтому нужно зависеть от протокола. harrymc 5 лет назад 0
PuTTY также может быть сбит с толку туннелем, поэтому сам туннель может препятствовать закрытию соединения с сервером. harrymc 5 лет назад 0
Сообщение об ошибке запроса канала SSH-2 может указывать на возвращение [этой ошибки] (https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/ssh-close-vs-request.html) в Ваша версия PuTTY или на сервере. В любом случае, вы наверняка столкнетесь с программной ошибкой, которая вам не нужна. Я предлагаю убедиться, что вы используете последнее обновление на сервере, а затем попробуйте некоторые из альтернативных клиентов, которые я перечислил выше, выполняя анализ, как я изложил в своем ответе. harrymc 5 лет назад 0
Я могу попробовать KiTTY в качестве абсолютного последнего средства, но я бы не стал, потому что PuTTY работал на меня так долго. Эта проблема только началась из ниоткуда, меньше месяца назад. PuTTY даже не изменился за год, поэтому я думаю, что проблема, очевидно, где-то в моей системе. felwithe 5 лет назад 0
2
Rob

PuTTY вылетает при выходе и требует перезагрузки компьютера

PuTTY падает, когда программа пытается выйти. Когда он падает, окно замерзнет и не закроется, несмотря ни на что. Принудительное закрытие не будет работать, диспетчер задач не будет работать. pskill из pstools (используя командную строку администратора) не имеет никакого эффекта - он говорит, что процесс был убит, но он остается. Ничто не заставит окно исчезнуть, кроме перезагрузки компьютера

Я называю это «зависанием», а не «падением». Сбой означает, что выполнение продолжает либо возвращать сообщение об ошибке (приятно), либо в случае серьезного повреждения памяти произойдет пауза (обычно короткая, иногда несколько длинная, редко - сторожевой таймер), и выполнение продолжится с BSOD или перезагрузкой (не приятно ).

С «зависанием» не будет времени ждать, что может продвинуть ваш прогресс, хотя другие потоки могут продолжать работать нормально, если ваш Переключатель задач не затронут и может переключиться на них.

Вполне возможно, что произошло то, что PuTTY создал подпрограмму VPN для туннелирования, и у этого процесса есть проблема; он не вернулся в PuTTY и поэтому PuTTY повешен.

В другом процессе может быть открыт временный файл или порт; завершение PuTTY вполне может закрыть подпрограмму, но, вероятно, не снимет блокировку файлов или портов с подпрограмм.

Как узнать наверняка - что происходит?

Читая веб-страницу сообщества Microsoft об этой ошибке под названием: « Проводник Windows 7 не отвечает - ошибка apphangb1 explorer.exe » говорит:

" Андре.Зиглер

Создайте дамп зависания в проводнике Windows:

http://www.msfn.org/board/topic/130005-creating-memory-dumps/

сожмите аварийный дамп как 7z или RAR и загрузите его в свой SkyDrive и опубликуйте ссылку здесь.

Создайте дамп, но вы можете проанализировать его самостоятельно или после поиска на всех сайтах SE дублирующего вопроса, спросите нас: «Как мне работать с файлом .DMP?».

После этой ссылки на веб-страницу: « Создание дампов памяти » написано:

« Дамп памяти из приложения / процесса, который ВИСИТ (не падает):

  1. Создайте каталог с именем c: \ adplus

  2. Откройте командную строку и перейдите в каталог, в который вы установили средства отладки. По умолчанию это «C: \ Program Files \ Средства отладки для Windows»

  3. Введите в командной строке следующую команду:

cscript adplus.vbs -hang -pn appname -quiet -o c:\adplus

(где "appname" - это имя .exe приложения, которое висит)

  1. Как только отладчик завершит работу (это может занять некоторое время), окно (а) командной строки закроется, и в вашей папке C: \ adplus появятся данные, которые можно проанализировать.

Дамп памяти из приложения / процесса, который происходит сбой (не висит):

  1. Создайте каталог с именем c: \ adplus

  2. Откройте командную строку и перейдите в каталог, в который вы установили средства отладки. По умолчанию это «C: \ Program Files \ Средства отладки для Windows»

  3. Введите в командной строке следующую команду:

cscript adplus.vbs -crash -pn appname -quiet -o c:\adplus

(где "appname" - это имя .exe приложения, которое вылетает)

  1. Как только приложение, к которому вы подключились на шаге 3, в конечном итоге падает, отладчик создает файл .dmp (или файлы) процесса. Как только отладчик завершит работу (это может занять некоторое время), окно (а) командной строки закроется, и в вашей папке C: \ adplus появятся данные, которые можно проанализировать.

См. Эту веб-страницу поддержки Microsoft: « Инструмент диагностики отладки v1.2 теперь доступен », где описывается использование инструмента DebugDiag.

Здесь обсуждаются:

  • Генерация дампов памяти:

    • Процесс Сбои

    • Процесс зависает или низкая производительность

Для отладки зависания процесса или снижения производительности используйте одно из следующих действий:

  1. Создайте правило производительности. Правило производительности может основываться на счетчиках производительности или времени ответа HTTP. Последний характерен для веб-серверов или веб-служб на основе HTTP. Правило «Счетчики производительности» позволяет вам захватывать серию последовательных пользовательских дампов, когда один или несколько счетчиков производительности превышают указанные пороговые значения. Правило HTTP Response Times позволяет вам использовать ETW (специфично для веб-сервера IIS) или WinHTTP (для проверки связи с любым типом веб-сервера или веб-службы на основе HTTP) для захвата пользовательских переходов по истечении заданного времени ожидания.

  2. Создайте серию ручных дампов памяти в медленном или зависшем состоянии, щелкнув правой кнопкой мыши имя процесса в представлении процессов и выбрав опцию «Создать серию дампов».

    Затем проанализируйте полученные файлы .dmp с помощью CrashHangAnalysis.asp и / или PerfAnalysis.asp (см. Ниже).

    • Память или использование ручки
  • Анализ дампов памяти:

    Одна из наиболее мощных функций DebugDiag - это возможность анализировать дампы памяти и генерировать файл отчета с анализом вместе с рекомендациями по решению выявленных проблем.

    DebugDiag использует «сценарии анализа» для анализа дампов памяти. В DebugDiag 1.2 поставляется 5 сценариев анализа:

    • Анализаторы сбоев / зависаний - CrashHangAnalysis.asp

    • Анализаторы давления памяти - DotNetMemoryAnalysis-BETA.asp

    • Анализаторы давления памяти - MemoryAnalysis.asp

    • Анализаторы производительности - PerfAnalysis.asp

    • Анализаторы SharePoint - SharePointAnalysis.asp ".

Независимо от проблемы, вы можете найти точную точку и выяснить, какой процесс виноват, и отладить его. Если у вас есть вопрос об использовании этих инструментов, не стесняйтесь проверить и задать новый вопрос.

Хорошо, я получил анализ сбоев, который выглядит так, как будто он может указывать на `mswsock.dll`. Я добавлю его к вопросу, поскольку в разделе комментариев недостаточно места. felwithe 5 лет назад 1
0
user2629074

Похоже, у вас могут быть проблемы с фильтрами winsock, и ваше приложение блокируется из-за какой-то проблемы с драйвером / вводом-выводом.

В командной строке администратора попробуйте: netsh winsock resetзатем перезагрузите компьютер и посмотрите, будет ли это иметь значение.

Вдобавок ко всему, вот еще кое-что, что можно попробовать:

  • Удалите все неиспользуемые программы VPN.

  • Удалите (и переустановите) драйвер для вашей сетевой карты.

  • Обновите драйвер для вашей сетевой карты.

  • Если вы недавно удалили антивирусный продукт, возможно, драйверы сетевых фильтров остались позади. Если это так, вы можете найти средство удаления для соответствующего продукта безопасности и запустить его.

-1
ds_secret

Попробуйте запустить два сканирования:

Сканирование 1

  1. Запустите CMD от имени администратора
  2. Введите SFC /scannowи нажмите ввод
  3. Когда сканирование закончится, откройте cbs.logв%windir%\logs\cbs\cbs.log
  4. Найдите cannot repairи скопируйте файлы, которые не были восстановлены.
  5. После того, как вы нашли файлы, которые не были восстановлены (если есть), используйте установочный диск для доступа к файлам замены. Следуйте этим указаниям для получения файлов замены.

Сканирование 2 (Последнее средство)

  1. Запустите CMD от имени администратора
  2. Введите Chkdsk /f /rи нажмите ввод
  3. Вам будет показано сообщение о том, что объем будет заблокирован. Нажмите yи затем введите.
  4. Перезагрузите компьютер
  5. Сканирование займет некоторое время. Подождите, пока сканирование завершится.
  6. При перезагрузке зайдите Event Viewer > Windows > Application Logи затем ищите Winninet.
  7. Посмотрите на результаты вашего сканирования.

Я нашел ответ в сообществе Microsoft .

НЕ запускайте `chkdsk / f / r` для проверки диска, так как это может быть разрушительным. Запустите сначала `chkdsk` и только если он обнаружил ошибки, и только после того, как вы сделали отличные резервные копии, сделайте другое. Однако я не думаю, что это ошибка диска. harrymc 5 лет назад 7