В последнее время получил распространение отдельный класс устройств, предназначенный целям управления оборудованием, использования в качестве малых рабочих станций или создания простых серверов. Речь идет об компьютерах на одной плате, таких как Raspberry Pi. Несмотря на свои размеры применять их можно и в роли контроллера аппаратуры, и в качестве небольшого мультимедийного, почтового, файлового или web-сервера, не считая уже случаев работы тонкими клиентами. Остается только вопрос управления одноплатником. Можно конечно отдавать команды непосредственно в консоль или контролировать рабочий стол используя монитор, клавиатуру и мышь. Но, каждый раз подключение для каких-либо действий дополнительного оборудования создает излишние затраты времени и труда. Выход есть и имя ему Secure shell. Изначальный сетевой протокол, используемый для доступа к консоли, удаленной *-NIX подобной системы, со временем резвившейся в удобное средство управления и файловой передачи ОС Linux.
Все приведенные далее сведения в основном будет относиться к Raspberry PI 3 и более старшим моделям одноплатников одноименной фирмы.
Как уже описано ранее SSH — протокол передачи информации, используемый в Linux, который в свою очередь устанавливается на Raspberry PI 3 под именем Raspbian. Причем речь идет не только о текстовых данных, но и потоковом видео и аудио вещании, изображениях, бинарных файлах. В полноформатных *NIX (Linux) системах он используется для доступа к экранным элементам управления и окнам X-ов, с возможностью их запуска на главной машине и отображения результата на клиентской. К сожалению, для малины подобная функция не доступна в рамках стандартного Raspbian. Все же названый клон Debian обладает определенными ограничениями по функциональности ОС, непосредственно связанными с относительно слабой аппаратной начинкой одноплатника. Если все же требуется получить доступ к рабочему столу, тут официальная документация системы рекомендует присмотреться к средствам контроля по протоколу VNC, использование которого, как и Secure Shell изначально заложено в малинку.
Что отличает SSH от того же TELNET, — наличие шифрования канала. Используя протокол можно не беспокоится о безопасности передаваемой информации, так как весь обмен единовременно кодируется. Еще одной из множества возможностей, заложенных в Secure shell можно упомянуть сжатие передаваемых данных, которое активируется соответствующей опцией на стороне сервера или клиента. Функция в некоторых случаях позволяет разгрузить канал обмена по протоколу SSH уменьшив объем потока информации за счет компрессии.
Организация интерфейсного доступа к консоли или возможностям протокола SSH начинается с запуска его серверной части на Raspberry PI. Сделать можно названую процедуру аж тремя методами при прямом подключении и одном «безголовом». Конечно, для первых изначально потребуется непосредственный доступ к консоли Raspbian Pi, с аппаратными клавиатурой и монитором. И во всех случаях, после того, как установлен параметр активации, нужно перегрузить Raspberry Pi для запуска сервиса.
Итак, последовательность действий:
Классический метод, работающий в любом Linux использующем systemd в качестве системы инициализации. Вводим в консоли:
sudo -s
# активируем сервис:
sudo systemctl enable ssh
sudo systemctl start ssh
Выполняется непосредственно из оконной системы Raspberry PI 3. В меню «Preferences» находящейся в своеобразном «пуск» на панели, нужно выбрать «Raspberry Pi Configuration». В открывшемся окне надо перейти на вкладку «Interfaces». В пункте SSH устанавливаем рядом расположенный переключатель в значение «Enabled». Далее делается подтверждение действия нажатием «Ок» внизу окна.
Активация сервера названным методом подойдет для случаев, когда графический интерфейс в Raspbian отключен. В консоли нужно набрать:
sudo raspi-config
После нажатия «Enter», по требованию, вводится пароль администратора (для случаев, когда его использование включено правилами, указанными файлом /etc/sudoers.d/010_pi-nopasswd). По умолчанию запрос безопасности отключен.
После откроется текстовая система меню настройки, в которой нужно перейти в раздел «Interface Options», используя клавиши стрелок клавиатуры и кнопку «Enter».
Зайдя в названый пункт конфигурации надо переместится в раздел SSH, и следом активировать внизу экрана «Enable», или для некоторых версий Raspbian «Yes». Затем «Ok». В последующем открывшемся текстовом окне со списком настроек «Finish».
И наконец, метод работающий для тех случаев, когда физическое подключение к одноплатному компьютеру отсутствует и есть только сетевое. Здесь понадобиться внести небольшие изменения на SD-карту с установленной системой Raspbian. На ней нужно найти загрузочный раздел. Если ставить «вчистую» операционку, то он будет меньшим среди двух находящихся на карте. В корень помещается файл без расширения и с любым содержанием, по имени «ssh». Обнаружив его при загрузке, Raspbian запустит Secure shell сервер, с пустым паролем безопасности, и пользователем «pi» (без кавычек).
Работает функция только до перезагрузки Raspberry PI и для постоянного последующего сетевого доступа по протоколу, требуется непосредственно указать запуск SSH одним из способов, описанных ранее. Происходит названное по причине удаления файла в загрузочном разделе Raspbian, после обнаружения его системой и однократного старта требуемой службы.
К вопросу об осуществлении доступа к названой части Raspbian из Windows. Проблемы в конкретном случае нет, по причине использования на загрузочном разделе файловой системы FAT32, родной для старших ОС от Microsoft. Здесь главное — наличие самого физического устройства чтения SD-карт.
Итак, с моментом активации Secure shell на малинке разобрались. Осталось подключиться к ней через сеть и опробовать возможности протокола по управлению консолью Raspberry Pi.
В составе дистрибутивов Linux или MacOS стандартно идет в поставке утилита «ssh», запуск которой производится из терминалов названых операционных систем. Для присоединения к малинке потребуется знать IP-адрес самого одноплатника в сети. Итак, в целях организации доступа к Raspberry Pi ssh набираем в консоли:
ssh pi@<ip адрес одноплатника>
Ответом будет запрос пароля, который по умолчанию проходится нажатием «Enter». Следом уже откроется командная строка малинки, предоставляя доступ к консоли одноплатника.
В том случае, когда стандартное имя пользователя было изменено, новое указывается в продемонстрированной ранее командной строке, вместо «pi». Хотя можно сделать проще, вообще убрав все что написано до «@», с ним включительно, из параметров запуска ssh и ввести логин и пароль (если установлен) непосредственно в высветившееся приглашение «login as:».
Контроль по протоколу Secure shell из Microsoft Windows производится с использованием сторонней и бесплатной программы «PuTTY». Найти ее достаточно легко, введя название в строку поиска Яндекс или Google и скачав архив, предлагаемый на страницах по высветившимся ссылкам.
Открыв программу (можно от обычного пользователя), для подключения переходят в раздел «Session». Далее, во вкладке окна на экране, ставится выбор переключателя групп «Connection type» в позицию «SSH». Следом заполняется поле «Host Name (or IP-adress)» собственно адресом малинки. «Port» должен быть равен 22. «Saved session» вводится по желанию — потом можно использовать сохраненную информацию методом двух кликов без ручного ввода. Окончательным действием с целью осуществления подключения будет нажатие кнопки «Open», после которого уже высветится присоединенное окно консоли к Raspberry PI с предложением ввести имя пользователя.
После настройки доступа по Secure shell рекомендуется озаботиться безопасностью подключения, даже в том случае, если малинка будет использоваться в качестве не присоединяемого к internet оборудования. Как говорится — в безопасности нужно предусмотреть все. Рано или поздно, возможно будет сделан глобальный выход в сеть. А уж там зависит организация безопасного доступа от элементарной забывчивости. Можно попросту поленится или «забегаться» и не установить пароль для логина или sudo, оставив все по умолчанию. Соответственно, другими словами, предоставив в собственное распоряжение потенциального злоумышленника, вычислительные мощности Raspberry PI работающего в локальной сети.
Основные рекомендации по безопасности, все команды в отношении которых выполняются в консоли малинки:
sudo raspi-config
sudo passwd root
sudo visudo /etc/sudoers.d/010_pi-nopasswd
sudo -s
# добавляем пользователя. После ввода команды будет спрошен пароль
# для нового пользователя строкой, содержащей «password»
adduser <логин>
# даем ему права (участие в группах доступа)
usermod -a -G \
adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,gpio,i2c,spi <логин>
# удаление стандартного pi. Но есть нюанс – в документации к
# Raspberry PI выражена рекомендации этого не делать, так как в
# некоторых приложениях он должен присутствовать в системе
pkill -u pi
deluser -remove-home pi
Если стандартного пользователя не удалять (последние две строки игнорировать к вводу), — рекомендуется задать ему пароль, отличный от установленного по умолчанию. Выполняется действие набором «sudo passwd pi» в консоли.
Отдельно хотелось бы рассмотреть случай подключенных пользователей по SSH с возможностью сжатия трафика. В Linux и MacOS для запуска режима компрессии используется модификатор команды с опцией «-C». Соответственно вызов программы доступа приобретает вид:
ssh -C <адрес малинки>
Работает метод сжатия не только в случаях удаленного контроля консоли по SSH, но и отправки файлов с использованием протокола Secure shell. Здесь применяется команда scp, входящая в общий пакет программ удаленного контроля. Формат со сжатием, для копирования файла из малинки:
scp -C pi@<адрес малинки>:<путь к файлу вместе с его именем> /куда/положить/файл
Ну или с использование ssh обратно, на Raspberry PI:
spc -C <имя файла> pi@<адрес малинки>:/куда/положить/файл
Казалось бы, подключились после настройки. А, нет, иногда случается ошибка «Raspberry pi ssh connection refused». При этом до малинки пинг в сети идет. Причина тут может быть только одна — Secure shell не запущен или блокируется фаерволом внутреннего роутера или самой ОС. Требуется вначале проверить состояние SSH подключившись к Raspberry Pi непосредственно, затем посмотреть настройки операционной системы клиента на предмет поиска ограничений сетевых протоколов. Ну и если не поможет — разбираться конкретно с блокировками маршрутизатора.