Подключение к локальной виртуальной машине Linux по SSH или как решить задачу о двух стульях ничьей

Думаю, у многих, прочитавших заголовок возникнет справедливый вопрос: «Зачем такое извращение?» На самом деле, у этого занятия есть определённый круг применений. Самое очевидное из них — это необходимость в пользовании для учёбы или работы одной операционной системой, в то время как вам больше нравится другая.

Некоторые воскликнут: «Но ведь можно поставить две системы в DualBoot или виртуальную машину, с которой можно общаться напрямую!» К сожалению, ни один из этих трёх способов не является панацеей. При использовании первого приходится постоянно скакать между системами, а также он доступен не на всех устройствах (на моём MacBook Pro 2017-ого года поставить нативно Linux — весьма неприятное занятие). Второй также требует работы с двумя разными системами, что может сильно ударить по чувству перфекционизма, а также требует весьма больших мощностей для использования средств по сглаживанию разницы между ними. Про третий же сейчас чуть подробнее расскажу.

Начну с предупреждения о том, что если вам в разработке необходим доступ к графическому интерфейсу, то этот способ не для вас (если пользуетесь Windows, то рассмотрите вариант с WSL. Linux там очень урезанный, зато можно подключить к ней X Window System). Будем подключаться к дистрибутиву на базе ядра Linux, но этот способ можно интерполировать на другие системы. Также замечу, что изначально мною рассчитывалось сделать небольшой туториал для одногруппников, но тема оказалась достаточно интересной, чтобы попытаться превратить её в статью. Поэтому то, о чём я собираюсь говорить может показаться некоторым пользователям Хабра слишком тривиальным.

У меня же возникла потребность в таком решении в виду следующих причин:

  1. Valgrind на MacOS Mojave не работает (на High Sierra он хотя бы компилировался, а -fsanitize мне не нравится).
  2. У моего устройства весьма небольшой объём батареи, в сравнении с моделями 2015-ого года, и ему часто приходится держаться до конца пятой пары.
  3. Не хочется перенастраивать VIM
  4. «Всё, что нас не убивает, делает нас сильнее»

Что же? Перейдём непосредственно к установке!

Для начала перейдём на сайт Ubuntu и скачаем установочный образ Ubuntu Server



Можно, в принципе, выбрать и любой другой дистрибутив, даже всемогущий Arch, но мне было лениво.

После чего создаём новую виртуальную машину в вашей любимой для этого программе. На Parallels и VMWare это делается просто и естественно, а на VirtualBox или QEMU придётся покурить мануалы. В случае первых двух рекомендую отключить разные не особо нужные плюшки типа «общих принтеров». Также можете попробовать ограничить производительность виртуальной машины для сохранения энергии, но не переборщите. В противном случае система просто не запустится.



В общем, желательно немного покопаться в настройках нашей подопечной для максимальной производительности. Самое главное — это опция «Общая сеть» (Shared network). Она позволяет машине выходить в сеть, и другим устройствам к ней удалённо подключаться.



Выберите язык и начните установку Ubuntu Server. Вас должен встретить такой экран —
(Да, он просит выбрать язык ещё раз)

Дальше ничего сложного (собственно, и не было). Просто тыкайте «далее» прямо как в Windows. Но, как говорится:



Потом настройте пользователя и запомните его логин (не путайте с полным именем) и пароль.



Также хочу отметить, что установщик попытается скачать дополнительные 66 мегабайт пакетов.



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



После этого всё должно быть готово, однако вы можете попробовать дополнительно настроить подключение по SSH. Для этого отредактируйте с помощью nano или Vim (чтобы из него выйти, наберите :wq) файл /etc/ssh/sshd_config от имени администратора:

sudo vim /etc/ssh/sshd_config

Для этого просто раскомментируйте нужные вам строки (удалите '#' перед каждой из них). После чего перезапустите службу для подключения по SSH:

service sshd restart

Далее нам нужно узнать ip адрес нашего устройства. Для этого нам пригодится команда:
ifconfig
Найдите среди вывода программы ваше устройство (иногда его название можно определять в настройках виртуальной машины) и запомните его адрес, помеченный как inet:



После всего этого окошко с нашей системой можно свернуть. Теперь давайте всё-таки попробуем к ней подключиться. для этого введём в терминал родной системы

ssh hovushka@10.211.55.28

где «hovushka» и «10.211.55.28» нужно заменить на ваш логин и ip адрес. Далее вас попросят ввести ваш пароль и вуаля! Вы зашли в Ubuntu:



Но на этом веселье не заканчивается! Мы, конечно, настроили подключение, и можем управлять виртуальной машиной, но это весьма бесполезно, так как мы не можем получить так просто доступ к её локальным файлам из родной системы. Конечно, Vim и по SSH прекрасно работает, но всё ещё отличий от простого использования виртуальной машины практически нет.

Я предлагаю поступить более креативно и воспользоваться sshfs. На MacOS он ставится летящей походкой через brew (он попросит сначала поставить FUSE). После этого достаточно ввести команду

sshfs hovushka@10.211.55.28: ~/SHH

где так же следует заменить логин и ip адрес, а "~/SSH" на какую-нибудь удобную для вас директорию. Далее к ней будет примонтирован домашний каталог нашего пользователя из виртуальной машины:



Теперь можно файлами виртуальной системы как угодно распоряжаться из-под хоста и пользоваться привычными программами и приложениями, запуская нужные команды через подключенный по SSH терминал:



Миссия выполнена!

У этого способа, несмотря на его большую аутентичность, есть свои минусы. Во-первых многие из них унаследованы от обычного использования виртуализации (например, падение производительности). Во-вторых, будет присутствовать небольшая задержка в записи изменений на виртуальный диск (вимерам может не понравится). Ну и в-третьих, некоторые виртуальные машины умеют видеть файлы с родной системы, но из командной строки это сложнее настроить и вам придётся пользоваться окном самой виртуальной машины, что накладывает ряд ограничений.

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

Всем добра!
Теги:
ssh, linux, virtualization, извращения

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.