вторник, 2 сентября 2008 г.

Удалённый доступ Linux-to-Linux, или Просто об SSH и VNC.

     Когда пришлось решать проблему удалённого доступа между правильными ОС, встал вполне логичный вопрос о том, как это осуществить. В голову сразу пришёл протокол SSH, о котором уже как-то читал, но не решался попробовать в действии, т.к. полагал что всё будет нудно и сложно, да и вообще мне это было не нужно. На самом деле, в простейшем случае, это совсем не так. Итак, если у вас и на обоих ПК установлен дистрибутив Ubuntu Linux, то получить графический доступ к рабочему столу, но по протоколу VNC, можно вообще в пару кликов мыши.

VNC

     Для этого сначала на удалённом ПК зайдите в "Система -> Параметры -> Удалённый рабочий стол" или в терминале выполните (сразу условимся: "$" перед командой - достаточно прав пользователя, а "#" означает, что нужны привилегии рута):

$ vino-preferences

После этого откроется окно настроек.
     Итак, для предоставления доступа нужно отметить пункт "Позволять другим пользователям видеть ваш рабочий стол". На этом можно и остановиться, но посмотрим, что предложили нам в дополнительных настройках. Здесь можно обратить внимание на разделы "Безопасность" вкладки "Общие" и "Уведомления" вкладки "Дополнительно". Можно вообще отключить какое-либо уведомление о подключении, убрав отметки пунктов в разделе "Безопасность", а в "Уведомления" отметив "Никогда не показывать значок". В принципе, настройки не нуждаются в комментариях, всё элементарно. После произведения настроек жмём "Закрыть". Так же необходимо убедиться, что открыты порты диапазона 5000-5006. Всё, ПК готов к соединению.
     Теперь, когда настройки удалённого ПК завершены, перейдём к осуществлению подключения. Для этого уже на рабочем ПК наберём:

$ vncviewer 111.111.111.111:0

Где "111.111.111.111" - IP удалённого ПК, а "0" (нуль) после двоеточия - номер дисплея удалённого ПК. Всё. Если в настройках не были указаны подтверждение или ввод пароля, то сразу откроется окно, в котором и будет отображён рабочий стол удалённого ПК. Можно пользоваться не только управлением мышью, но и клавиатурой. Хочу отметить, что если запустить вот так:

$ vncviewer FullScreen=1 111.111.111.111:0

то рабочий стол будет отображён в полноэкранном режиме, а не в окне. Если вы захотите выйти из полноэкранного режима, то нажмите F8 и уберите соответствующую галочку. Так же здесь имеются дополнительные настройки соединения в меню "Settings", которые так же доступны в виде свойств при запуске vncviewer (в терминале: $ vncviewer --help).
     Данный метод есть смысл использовать только в случае достаточно быстрого Интернет-соединения и на десктоп-ориентированных ПК с X Window System. А так как сам по себе этот протокол всё-таки не отличается особой безопасностью, то работать с ПК, содержащим важные данные, не рекомендуется. В случае работы с важными данными гораздо лучше запускать VNC-сессию через SSH-тоннель. Но это не входит в данный обзор, поэтому пока ограничимся шифрованным доступом к командной оболочки удалённого ПК.

SSH

     С помощью SSH всё не так красочно, но зато быстро и надёжно. Используя SSH можно без проблем организовать надёжный и шифрованный канал между двумя машинами. Приступим.
     Для начала необходимо убедится, что на удалённом ПК работает SSH-сервер:

$ ps -ax|grep sshd

Должна появится строка вроде "5437 ? Ss 0:00 /usr/sbin/sshd". Если это не так, то запускаем

# /etc/init.d/ssh start

или устанавливаем его (демон запустится автоматически):

# apt-get install openssh-server

Убедитесь, что порт 22 для TCP-соединений не закрыт. С удалённой машиной всё :)
     Теперь переходим к поднятию соединения. Убедитесь, что у вас установлен SSH-клиент:

$ aptitude search openssh-client

В начале строки должна стоять буква "i". Если это не так, то:

# apt-get install openssh-client


     Осуществлять аутентификацию будем по двум ключам - приватному (шифрованный) и публичному. Это просто и удобно, лучше чем по паролю на удалённом ПК. Для этого нужно сначала создать эти два ключа:

$ ssh-keygen

Будет задана как минимум пара вопросов. Место расположения ключа оставьте по умолчанию, т.е. на первый вопрос просто нажмите Ввод, а вот потом введите ключевую фразу и в следующем шаге подтвердите ввод. Фраза должна быть более 4-х байт, но лучше с запасом. 6-8 символов вполне подойдут. После этого скопируем публичный ключ на тот самый удалённый ПК через Сеть (трафик шифруется):

$ ssh-copy-id user@ip

Где "user" - название учётной записи пользователя удалённого ПК, от имени которого вы будете работать, а "ip" - IP того ПК. После установления соединения ответьте "yes" на подтверждение передачи публичного ключа через интернет, а потом введите пароль этого аккуанта. Всё, ключ скопирован на удалённый ПК. С этого момента вы сможете заходить на него без ввода пароля пользователя, а лишь вводя свою ключевую фразу для расшифровки своего же (приватного) ключа. Делается это очень просто:

$ ssh user@ip

Таким образом, если вы будет работать под чьим-то аккуантом, то его владелец сможет сменить пароль после передачи ключа, а вы этого даже не заметите.
     Итак, после подключения у вас в терминале/консоли будет выведено информационное сообщение, а строка приглашения изменится на user@server, где "server" - уже имя удалённой машины.



     ВНИМАНИЕ! Это на словах всё должно так просто заработать, на деле могут возникнуть проблемы. Цель статьи - максимально быстро поднять соединение. Я сократил изложение до минимума, опустив даже дополнительные свойства команд.
     НАСТОЯТЕЛЬНО рекомендую ознакомиться с не очень длинной, но крайне познавательной статьёй, по которой автор данного блога SSH и настраивал:
http://www.nixp.ru/articles/ssh
Из неё вы узнаете как перенести ключ "вручную", настроить клиентский и удалённые ПК, о файлах, так или иначе связанных с работой SSH, а так же о повышении безопасности.



Текст сообщения распространяется под лицензией GNU Free Documentation Licence

Комментариев нет: