5

Я действительно нахожусь в своем уме, поэтому я надеюсь, что кто-то здесь может мне помочь. У меня есть виртуальная машина под управлением Ubuntu Server 9.10. Это небольшая среда разработки, поэтому я могу отделить свой код от тестовой и рабочей сред. Я запускаю его через VirtualBox 3.1.6 на ноутбуке с Ubuntu Desktop 9.10. Я настроил его на мостовое сетевое соединение и подключил к беспроводному адаптеру моего ноутбука. У нас нет проводных соединений в этом офисе.

Я загружаю ВМ и все в порядке. Я могу подключиться к нему по SSH, используя gnome-терминал, и какое-то время все кошерное. Затем, казалось бы, случайно, сессия терминала SSH с зависанием. Нет сообщения об ошибке, ничего; это просто становится безразличным. Если я иду к терминалу VirtualBox, я нахожу, что сама виртуальная машина в порядке. Это может пинговать, и я могу SSH с этим. Если я перезапущу сеть на виртуальной машине, сеанс SSH в моем терминале gnome в большинстве случаев снова станет отзывчивым.

Вот интересный момент: сессия SSH иногда умирает прямо в середине моего ввода чего-то (это указывает на то, что это не проблема с сессией бездействия), и если я перехожу к терминалу VirtualBox и перезагружаю сеть, а затем возвращаюсь к своему gnome- Сеанс терминала SSH Я обнаружил, что он вернется к жизни, и то, что я набрал, когда сеанс завис первоначально, волшебным образом введет себя в буфер. Таким образом, мои данные хранятся где-то и просто не могут добраться до виртуальной машины, пока сеть на виртуальной машине не будет перезапущена.

Я пробовал разные версии VirtualBox и использовал образы vmdk и образы vdi, но ничего не работает. Я не могу сказать, связана ли проблема с моим ноутбуком, VirtualBox или VDI Ubuntu Server. Есть ли способ отладки этой проблемы? Или кто-нибудь там видел что-нибудь подобное?

5 ответов5

1

Итак, я нашел основную причину своей проблемы, и это так просто, что я немного смущен: конфликтующие сетевые IP-адреса. Как я и предполагал, это действительно была проблема с сетью, но это было не так сложно, как я это делал.

Поскольку я использую мостовую сеть, виртуальная машина отображается в таблице клиентов DHCP вместе со всеми остальными машинами в сети. Если какая-либо из этих машин получит IP-адрес моей виртуальной машины от DHCP (скажем, до того, как я загрузлю свою виртуальную машину на весь день), это вызовет конфликт всякий раз, когда моя виртуальная машина включится, и может заставить мою виртуальную машину перестать отвечать на SSH. Это объясняет, почему, когда я использовал терминал VirtualBox, у меня не возникало никаких проблем.

Я не совсем уверен, как большинство маршрутизаторов обрабатывают конфликты IP, но кажется, что любой компьютер, который последним имеет сетевую активность, получает приоритет. Поэтому, когда я отказался от работы в сети на моей машине, все было в порядке, пока какой бы ни компьютер не разделял IP, решил заняться сетевой деятельностью, а затем BOOM ... мое соединение зависло.

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

1

Вот правильный способ сохранить сессию SSH

Если вы являетесь владельцем удаленного сервера, то отредактируйте файл конфигурации демона SSH.

sudo vi /etc/ssh/sshd_config  #  on your server

добавить эти строки

ClientAliveInterval 120 # server sends clients "null packet" every 120 seconds
ClientAliveCountMax 720 # allow clients to stay alive for  720 intervals

720 интервалов === (120 секунд * 720 = 86400 секунд = 24 часа)

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

vi  ~/.ssh/config   #  on local host NOT on server

ServerAliveInterval 120
0

Ну, я так и не нашел причину этой проблемы, но это определенно связано с сетью. У нас здесь есть маршрутизатор Cisco, который, конечно, иногда очень мал, поэтому официальный ответ может лежать там. Однако я придумал обходной путь. Я написал очень простой сценарий оболочки, который я запускал каждую минуту под пользователем root:

#!/bin/bash

#keep-alive.sh

/etc/init.d/networking restart
/etc/init.d/ssh restart

Это просто отскакивает от сети и Open SSH на сервере VM каждую минуту. Это хакерское, не элегантное решение, но оно не дает моей сессии SSH постоянно зависать. Единственная причина, по которой я нахожу это приемлемым, заключается в том, что он выполняет свою работу и предназначен только для среды разработки небольшого виртуального сервера. Естественно, я АБСОЛЮТНО НЕ пропагандирую подобные вещи для любой производственной среды.

0

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

0

Вы вводите Ctrl+S, что может остановить сеанс (по старым причинам)? Нажмите Ctrl+Q один из этих случаев, чтобы он завис, и посмотрите, будет ли он заморожен.

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