The SSH (Secure-Shell) – это «безопасная оболочка». Так называется специальный сетевой протокол прикладного уровня по модели OSI. С его помощью можно осуществлять удаленное управление операционной системой, а также туннелирование TCP-соединений (пример – для передачи файлов).
Далее the SSH будет изучен более подробно. Предстоит выяснить, что собой представляет этот протокол, где и для каких целей он используется. Также необходимо познакомиться с ключевыми командами управления the SSH. Эта информация пригодится как обычным пользователям (особенно тем, кто работает с Linux OS), так и IT-специалистам.
Определение
Протокол Secure-Shell (SSH) – это дистанционная командная строка. С ней визуально пользователь работает на своем компьютере, но на самом деле – на другом. Это защищенный протокол для удаленного доступа к ПК и ноутбукам.
Протокол – это своеобразный набор соглашений, правил и принципов, опираясь на которые, программы могут обмениваться данными. The SSH – правила, известные компьютеру пользователя и удаленному устройству.
Защищенный протокол – это протокол, у которого есть система защиты. По ним работают сайты с HTTPS и онлайн-банкинг. При защищенном соединении вся информация передается в зашифрованном виде. Расшифровать ее «просто так» не сможет даже самый опытный злоумышленник.
The SSH – набор программ, позволяющих регистрироваться на компьютере по сети, удаленно выполнять на нем различные команды, копировать и перемещать документу между компьютерами. С помощью этого протокола удается организовать защищенное безопасное соединение поверх небезопасных каналов связи.
The SSH предоставляет замены традиционным r-командам удаленного доступа. Эти самые операции обладают повышенной безопасностью. Они будут выполняться поверх защищенных зашифрованные соединений, которые не позволяют прослушивать или подменять трафик. Рассматриваемый элемент может выступать средством обеспечения безопасного соединения для передачи любого другого трафика. Примеры – почтовые сообщения, разнообразные файлы.
Ключевые функции
The SSH возник как попытка обезопасить открытые незащищенные соединения. Со временем его функции и возможности были значительно расширены. Наиболее значимыми выступают:
- Безопасные команды доступа к хосту. The SSH позволяет выполнять разнообразные безопасные команды доступа к хосту. Примеры – scp (удаленное копирование), ssh (удаленная оболочка) или slogin (удаленный вход в систему).
- Port Forwarding. The SSH может выполнять переадресацию портов, передавая трафик с одного порта одного устройства на другой порт другого оборудования. Передаваемая информация будет обрабатываться в зашифрованной форме.
- X11 Forwarding. Так называется встроенный механизм для выполнения удаленных клиентов X Window.
Это основные функции изучаемого элемента. Они используются системными администраторами и специалистами по компьютерной безопасности чаще всего.
Обеспечение безопасности
Изучаемый протокол обеспечивает безопасность установленному соединению. Такой результат достигается за счет некоторых концепций:
- Шифрование соединения. Оно может выполняться наиболее подходящим способом. Шифрованное соединение не позволяет просто перехватить и использовать трафик. Выбор алгоритма реализации соответствующей операции делает систему более гибкой и надежной, позволяя не использовать алгоритмы с обнаруженными уязвимостями или которые не поддерживает одна из сторон.
- Аутентификация сервера. Соответствующая операция выполняется при каждом соединении. За счет соответствующей особенности не получится выполнить подмену сервера или трафика.
- Аутентификация клиента. Эта процедура может выполняться одним из нескольких доступных способов. Данная концепция позволяет повысить надежность аутентификации, а также делает систему более простой и гибкой в плане использования.
- Проверка целостности пакетов. Этот метод обеспечения безопасности дает возможность отслеживать любые незаконные изменения в трафике установленного соединения. Если соответствующие корректировки обнаружены, подключение будет немедленно разорвано.
- Временные параметры аутентификации. Они не позволяют пользоваться данными соединения, если через какое-то время после перехвата трафик был расшифрован. Устаревание обычно осуществляется в течение часа.
Все это указывает на то, что the SSH – это безопасный и надежный способ подключения к удаленному компьютеру.
Соединение и аутентификация через the SSH осуществляется одним из двух методов:
- Вход по паролю. В этом случае между клиентом и сервером создается общий секретный ключ. С его помощью будет шифроваться дальнейший трафик.
- Вход по паре ключей. Перед первым соединением пользователь генерирует два ключа: открытый и закрытый. Они сохраняются на удаленном и локальном устройствах соответственно.
Далее эти два варианта будут рассмотрены более подробно. Также предстоит ознакомиться с возможностью протокола, синтаксисом его команд и настройками демона the SSH.
Синтаксис
Для подключения к удаленной системе при помощи the Secure Shell необходимо воспользоваться командой ssh. В самой базовой форме она представлена так:
$ ssh remote_host
Remote_host здесь – это IP-адрес или доменное имя узла, к которому пытается подключиться пользователь.
Соответствующая команда предполагает, что имя пользователя в удаленной системе совпадает с именем пользователя в локальной системе. Если имена разные, можно задать их при помощи такого синтаксиса:
$ ssh remote_username @ remote_host
Для завершения сеанса the ssh и возврата в сеанс локальной оболочки используется команда:
$ exit
Чтобы пользоваться командами the Secure Shell, необходимо знать их. Общая форма записи синтаксиса операций имеет следующую интерпретацию:
$ ssh [опции] пользовательское имя@сервер [команда]
The SSH может работать по двум версиям протокола – 1 и 2. Первый вариант менее безопасный. Второй поддерживает больше типов шифрования и аутентификации. Далее предстоит изучить основные команды the Secure Shell, подразумевая использование 2 версии протокола.
Ключевые опции
Для работы с командами the SSH необходимо знать не только команды, но и определенные опции. Вот основные из них:
- f – перевод the SSH в фоновый режим;
- c – активация процедуры сжатия;
- X – включение перенаправления X11;
- x – отключение перенаправления X11;
- g – разрешить удаленным машинам обращаться к локальному устройству;
- q – не показывать сообщения об ошибках;
- l – пользовательское имя в системе;
- v – включение режима отладки;
- p – порт the SSH на удаленном устройстве;
- n – перенаправить стандартный вывод в /dev/null.
Это не все существующие опции утилиты. Остальные элементы просто используются не так часто. Большинство настроек работы the SSH можно изменить при помощи конфигурационного файла `/.ssh/config. Этот момент не будет изучен более подробно далее. Он больше подходит уже опытным IT-специалистам.
SSH-сервер
The SSH-сервер устанавливается на управляемой операционной системе. Он используется для принятия входящих подключений от клиентских машин. Проверяет соединение одним из нескольких способов:
- По IP-адресу клиента – это не самый безопасный подход из-за риска подмены.
- По публичному клиентскому ключу и пользовательскому имени. Нужно создать приватный (закрытый) и публичный (открытый) ключ. Зашифровав данные одним ключом, при помощи второго можно расшифровать их.
- По клиентскому паролю. Он будет передаваться изначально в зашифрованной форме. Данная концепция является наиболее распространенной. Пароль вводится в специальное поле при каждом подключении.
Для разных операционных систем поддерживаются различные платные и бесплатные the SSH-серверы. Примеры: freeSSHd, OpenSSH, WinSSHD для Windows и lsh-server, dropbear, open-server для Linux.
SSH-клиент
Перед более детальным изучением Secure-Shell (the SSH) необходимо обратить внимание на SSH-клиенты. Они используются для непосредственного входа на удаленный сервер и выполнения тех или иных команд. Через клиент осуществляется управление удаленным компьютером.
SSH-клиенты, как и серверы, поддерживаются всеми операционными системами. Главное – подобрать подходящее программное обеспечение. Оно бывает как платным, так и бесплатным. Примеры: putty, openssh-client для Linux/BSD, connectBot для Android и SecureCRT для Windows. В Windows 10 (от сборки 1809) по умолчанию есть встроенный SSH-клиент, базирующийся на OpenSSH.
Настройка сервера
Теперь можно более подробно рассмотреть ssh-сессии и ключевые операции в клиент-серверной модели. Начать необходимо с настройки сервера. Необходимые данные конфигурации располагаются в файле /etc/ssh/sshd_config. Начать настройку нужно при помощи файла /etc/ssh/sshd.conf.
Порт the SSH
По умолчанию the SSH функционирует по порту 22. Это далеко не самое безопасное соединение. Злоумышленники знают соответствующий порт. Они могут попробовать выполнить Bruteforce-атаку для перевода пароля. Чтобы задать порт подключения, нужно использовать команду:
Port (номер порта без кавычек)
Чтобы изменить порт подключения, достаточно всего лишь указать его в представленной выше форме.
Протокол the SSH
По умолчанию the SSH-сервер способен функционировать по двум версиям протокола. Это необходимо для достижения максимальной совместимости. Чтобы воспользоваться только второй версией, требуется раскомментировать строку:
# Protocol 2
Она должна быть приведена к следующей форме записи:
Protocol 2
То же самое можно сделать с первой версией протокола.
Доступ
По умолчанию Root-доступ по the SSC разрешен. Подобное поведение нельзя назвать безопасным. Именно поэтому рекомендуется раскомментировать строку:
PermitRootLogin no
Доступ к рассматриваемому элементу может быть предоставлен конкретному пользователю или группе. Для этого в конфигурационный файл требуется добавить две строки:
AllowUsers User1, User2, User3
AllowGroups Group1. Group2, Group3
Здесь UserN и GroupN – это пользователь или группа, которым необходимо разрешить доступ. В качестве N выступает целое число, начиная от 1.
Выполнение X11 приложений
Secure Shell может использоваться для запуска полноценных X11 приложений. Чтобы система работала с ними исправно, требуется разрешить соответствующие команды и операции на стороне сервера. Для этого предстоит добавить строку:
X11Forwarding yes
Все представленные выше команды и операции – это основные настройки сервера. Перед тем как переходить к дальнейшей работе с системой, нужно перезагрузить SSH-сервер. Это требуется для сохранения и применения внесенных изменений:
$ service sshd restart
Теперь можно приступить к непосредственной работе с изучаемой «технологией».
Использование SSH
С основными данными о the SSH удалось ознакомиться. Теперь можно рассмотреть полезные и интересные способы использования этого компонента. Далее представлены команды, помогающие добиться тех или иных манипуляций:
- Подключение к серверу: $ ssh user@host. Это первая и «базовая» команда.
- Выполнение команды: $ ssh user@host ls. Эта операция позволяет выполнять команды без открытия терминала удаленной машины. Здесь будет реализована опция ls.
- А вот команда, которая поможет выполнить интерпретатор bash на удаленном сервере, а затем передаст имеющийся локальный скрипт: $ ssh user@host ‘bash -s’ < script.sh.
- Бекап на удаленный сервер и восстановление: $ sudo dd if=/dev/sda | ssh user@host ‘dd of=sda.img’. Эта операция отвечает за перенаправление вывода dd при помощи оператора перенаправления |, а также за дальнейшее его сохранение «на той стороне» в отдельный файл. Для восстановления состояния диска из сделанной копии выполняется команда: $ ssh user@host ‘dd if=sda.img’ | dd of=/dev/sda. Здесь (и в предыдущей операции) /dev/sda – это имя файла жесткого диска.
- Неудачные попытки входа в the SSH: $ cat/var/log/secure | grep «Failed password for».
- Передача файлов: $ scp /адрес_локального_файла пользователь@хост: адрес_папки. Этотобщий вид команды. Кроме scp может использоваться cat.
- Запуск графического приложения на удаленном сервере: $ ssh –XC user@remotehost “eclipse”.
- Включение поддержки Escape-последовательностей: EscapeChar~.
Это основные команды, которые могут пригодиться при работе с рассматриваемой «технологией». Также стоит обратить внимание на проброс порта с удаленной машины локальной:
Теперь осталось рассмотреть несколько способов аутентификации: с паролем и без него.
Аутентификация без пароля
Это наиболее простое, но не самое безопасное решение. Пароль в любой момент может быть подобран злоумышленником. Наиболее безопасный подход к аутентификации – это использование пары ключей RSA. Секретный ключ будет храниться на компьютере, а публичный – применяться на сервере для удостоверения пользователей.
Такое поведение можно настроить без существенных затруднений. Сначала нужно создать ключ:
$ ssh-keygen –t rsa
В процессе создания ключа потребуется ответить на несколько вопросов. Расположение должно быть оставлено по умолчанию. Поле Passphrase тоже должно быть пустым. Теперь можно отправить ключ на сервер:
$ ssh-copy-id –I ~/.ssh/id_rsa.pub user@host
После обработки соответствующей команды пароль запрашиваться при подключении к серверу не будет.
Пароль из локального файла
Хранить пароли в обычных текстовых файлах при работе с Secure Shell необязательно. Это еще и небезопасно. В локальном файле можно сохранить пароль. Для этого используется команда:
$ ssh user@host < local_file.txt
Теперь понятно, что собой представляет Secure Shell. Основные команды для работы с этой «технологией» тоже рассмотрены. Быстрее освоить ее с нуля помогут специализированные компьютерные курсы.
P. S. Интересуют компьютерные сети, сетевые технологии, протоколы передачи данных? Обратите внимание на следующие курсы в Otus: