Протокол удаленного доступа SSH. Немного теории
- Подробности
- Опубликовано 26.02.2016 02:28
SSH (Secure Shell) - это сетевой протокол удаленного доступа, использующий шифрование и сжатие для передаваемых данных. Проще говоря - это весьма полезный и мощный инструмент, позволяющий аутентифицироваться в системе и полноценно работать от имени локального пользователя, находясь за много километров от работающей машины - передавать (в том числе и потоковые, вроде видео с веб-камеры) данные с сервера на клиент и даже запускать графические приложения на сервере. Также, в отличие от telnet и rsh - SSH шифрует весь трафик, так что вся переданная информация остается конфиденциальной. В данной статье мы научим вас правильно им пользоваться.
SSH, о котором пойдет речь - не совсем, SSH, а OpenSSH. Протокол имеет две реализации - закрытую коммерческую - SSH, и альтернативную свободную - OpenSSH (обе используют почти один и тот же набор команд). Вторая используется повсеместно и доступна в репозиториях большинства Linux/-BSD и прочих систем (даже Solaris и Windows). Вот и установим её:
apt-get install ssh
Или для ArchLinux
pacman -S install openssh
В комплект входит сервер и клиент. Прежде чем приступать к настройке, важно понимать, что неправильно сконфигурированный сервер ssh может стать огромной дырой в безопасности. C минимальным набором данных кто угодно сможет получить полный доступ к вашей системе и данным (хотя если вы заинтересуете кого-нибудь, вроде АНБ, то даже шифрование SSH вас не спасет:).
Как происходит безопасное соединение? SSH работает с двумя методами аутентификации - по паролю, и по ключу (Public-key cryptography). SSH генерирует два ключа - один публичный или открытый (~/.ssh/id_rsa.pub), лежащий на сервере (точнее, в директории пользователя сервера, под которым вы аутентифицируетесь) и доступный всем, а второй - закрытый (~/.ssh/id_rsa) ключ пользователя для логина на удаленной машине. Никому нельзя показывать закрытый ключ. Если кто-то скопирует его себе, необходимо в обязательном порядке сгенерировать новый.
При аутентификации по ключу, удаленный клиент должен передать свой публичный ключ серверу, а сервер, прочитав публичный ключ, будет искать у клиента закрытую часть ключа. Ключи связаны, но зашифрованы таким образом, что подбор закрытого ключа по открытому крайне ресурсозатратен. Закрытый ключ не пересылается при проверке - сервер сам проверяет, есть ли у пользователя нужные ключи. Поэтому метод предпочтительней в плане безопасности, ведь исключает сценарий атаки "человек посередине".
В аутентификации по паролю всё просто. Если сервер не нашел подходящего ключа на стороне удаленного клиента, то он позволяет зайти на сервер с использованием пароля от вашей учетной записи на сервере. Да, так гораздо проще, но аутентификация по ключу - безопасней.
Список открытых ключей машин, которым сервер доверяет, обычно лежит в ~/.ssh/authorized_keys. Если взять ключ ~/.ssh/id_rsa.pub удаленной машины, и скопировать его в ~/.ssh/authorized_keys сервера (в папке ~/.ssh пользователя сервера, под которым разрешено логиниться с удаленной машины), то при следующем логине у вас не спросят пароль, ведь между удаленной машиной и сервером установились "доверительные отношения". Важно: права на ~/.ssh/authorized_keys должны быть выставлены так, чтобы запись была разрешена только пользователю, под которым вы логинитесь, и (или только) root (для chmod это права 600). Для копирования ключа есть даже собственное приложение: ssh-copy-id (которое уже установлено). Просто пропишите
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
И (после логина по паролю) ваш открытый ключ появится в ~/.ssh/authorized_keys сервера.