2014-01-03 4 views
3

Может ли кто-нибудь сказать мне, почему после перезагрузки экземпляра Google Compute Engine я получаю тайм-аут соединения ssh. Я перезагружаю экземпляр при перезагрузке sudo и Google Compute Engine Console, и оба делают то же самое.ssh время подключения после перезагрузки Экземпляр GCE

ответ

1

Спасибо, Брайан Дорси, Э. Андерсон и vgt за ответ на мой вопрос. Проблема была другая. Каждый раз, когда я перезагружал соединение ранее, я подключался к ethernet-мосту с помощью утилиты brigde-util между «eth0» inferface и новым интерфейсом Brigde под названием «br0». После сброса экземпляра на sudo reboot или с помощью консоли GCE, соединение ssh перестало работать.

Но если я не подключаюсь к мосту ethernet, экземпляр перезапускают ok с помощью обоих методов.

5

Когда ОС выключается для перезагрузки, все сетевые соединения закрыты, включая соединения SSH. С клиентской стороны это может выглядеть как время соединения.

0

Немного ортогонально ответу Брайана. Чтобы корректно перезагружать GCE VM вы можете использовать:

gcutil resetinstance

2

При использовании gcutil resetinstance, он делает то же самое, нажав кнопку питания на физическом хосте. Это отличается от, например, sudo reboot, поскольку первый не дает операционной системе возможность выполнить любое завершение работы (например, закрытие открытых сокетов, промывочных буферов и т. Д.), В то время как последнее выполняет упорядоченное завершение работы.

Возможно, вам необходимо зарегистрироваться в экземпляре, чтобы выполнить перезагрузку, а не использовать gcutil resetinstance, если хост все еще доступен для ssh; resetinstance (или кнопка «Перезагрузка экземпляра» в графическом интерфейсе) - это жесткий сброс, который позволяет вам восстанавливаться после сбоя ядра или сбоя SSH.

Более подробно:

Во время ОС-инициированной перезагрузки (как sudo reboot), операционная система выполняет ряд этапов очистки, а затем переходит на уровень выполнения 6 (перезагрузки). Это приведет к запуску всех сценариев в /etc/init.d, а затем изящное завершение работы. Во время изящного выключения sshd будет убит; sshd мог поймать сигнал уничтожения, чтобы закрыть все его открытые сокеты. Закрытие сокета приведет к отправке TCP-пакета FIN, который начнет упорядочивать TCP-сообщение (сообщение «Закрыто» соединения в вашем ssh-клиенте). В качестве альтернативы, если sshd просто выходит, ядро ​​отправляет пакет RST (сброс) во всех открытых сокетах TCP, что вызовет сообщение «Connection reset» на вашем ssh-клиенте. После того, как все процессы будут отключены, ядро ​​будет следить за тем, чтобы все грязные страницы в кеше страницы были сброшены на диск, затем выполните один или два из трех механизмов для запуска перезагрузки BIOS. (ACPI, контроллер клавиатуры или тройной отказ).

При запуске внешнего сброса (например, через вызов API или графический интерфейс resetinstance) виртуальная машина будет немедленно перейти на последний шаг, а операционная система не будет иметь возможность сделать любой из изящных шагов выключения выше. Это означает, что ваш клиент ssh не получит пакет FIN или RST, как указано выше, и будет замечен только закрытие соединения, когда удаленный сервер перестает отвечать на запросы. («Время ожидания подключения»)

0

Если ваш экземпляр изображения CentOS, попробуйте удалить selinux.

sudo yum remove selinux* 
Смежные вопросы