2

Сценарий:

ssh user@host
# good connection, do some work...
# stop working, the server has some function where it automatically disconnects ...
# I come back to my cygwin window and it is unresponsive to ctrl + c/z and finally after maybe 2-5 minutes it comes back with the following error message:
Write failed: Connection reset by peer
MyLocalUsername@MyLocalComputer ~
$
# Now I can resume my cygwin session and reconnect.

Моя проблема: мне не нравится, как висит Cygwin. Я не хочу принудительно закрывать его, и мне не приходится открывать другое окно (смысл использования cygwin для меня - оставаться на клавиатуре и не терять производительность, возвращаясь к окнам. Короче я бы предпочел ctrl + c для работы или чтобы он вообще не зависал.

3 ответа3

2

Это работает для меня на Cygwin64 на Windows 8:

1) Инициируйте соединение SSH с -e "~", чтобы установить символ выхода в качестве тильды. Это должен быть escape-символ по умолчанию, но он не работал для меня, пока я не использовал опцию -e. Очевидно, вы также можете установить директиву EscapeChar ~ в своей конфигурации SSH.

2) Когда ваш SSH сессия перестает отвечать на запросы, нажмите Enter, ~., Вам может понадобиться, а может и нет, дважды нажать тильду, чтобы отправить ее. Я читал во многих местах, что это необходимо, но это работает для меня, нажимая только один раз.

Этот ответ основан на этом и его комментариях: https://superuser.com/a/98565/10167

0

Вот решение для ограниченного набора случаев: если функция, которая отключается, является чем-то предсказуемым, что вы явно вызываете, и вы просто хотите выйти чисто после ее вызова, и если вы знаете, что эта команда займет больше секунды, чтобы вызвать отключение Вы можете использовать nohup , sleep и параллельный вызов для exit . Например, если вашей команде гарантированно потребуется более одной секунды, чтобы вызвать разъединение, вы можете вызвать ее следующим образом:

nohup <slowcommand> & (sleep 1 && exit)

Это гарантирует:

  • slowcommand будет запущен до вызова exit
  • оболочка завершит работу до того, как slowcommand вызовет разъединение (если slowcommand команда вызывает разъединение более чем за секунду)
  • slowcommand не будет прервана вызовом для exit
0

Вы можете добавить опцию в вашу команду ssh, попробуйте это:

ssh -o ServerAliveInterval=30 username@host

Это должно предотвратить отключение вас от хоста.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .