SSH или Secure Shell — это зашифрованный протокол, который часто используется для взаимодействия и удаленного управления серверами. Если вы захотите что-либо сделать на удаленном сервере, скорее всего, вам придется воспользоваться SSH и работать через терминал.
В SSH существует несколько способов авторизации. Вы можете каждый раз вводить пароль пользователя или использовать более безопасный и надежный способ — ключи SSH. Что самое интересное, он более удобен для применения, вам даже не нужно будет вводить пароль. В этой статье мы рассмотрим как настраивается авторизация по ключу SSH.
SSH сервер может выполнять аутентификацию пользователей с помощью различных алгоритмов. Самый популярный — это аутентификация по паролю. Он достаточно прост, но не очень безопасный. Пароли передаются по безопасному каналу, но они недостаточно сложны для противостояния попыткам перебора.
Каждая пара ключей состоит из публичного и приватного ключа. Приватный ключ сохраняется на стороне клиента и не должен быть доступен кому-либо еще. Утечка ключа позволит злоумышленнику войти на сервер, если не была настроена дополнительная аутентификация по паролю.
Публичный ключ используется для шифрования сообщений (он не является секретным) , которые можно расшифровать только приватным ключом. Это свойство и используется для аутентификации с помощью пары ключей. Публичный ключ загружается на удаленный сервер, к которому необходимо получить доступ. Его нужно добавить в специальный файл ~/.ssh/authorized_keys.
Проверка подлинности ключей
Когда клиент попытается выполнить проверку подлинности через этот ключ, сервер отправит сообщение, зашифрованное с помощью публичного ключа, если клиент сможет его расшифровать и вернуть правильный ответ — аутентификация пройдена.
Для генерации пары ключей используется программа ssh-keygen, она включена в пакет ssh и если SSH у вас уже настроен, то дополнительно устанавливать ничего не нужно.
По умолчанию ключи располагаются в папке ~/.ssh/. И лучше расположение этой папки не менять, чтобы все работало по умолчанию и ключи автоматически подхватывались. Приватный ключ будет называться id_rsa , а публичный id_rsa.pub .
Сгенерим ключ через команду:
$ ssh-keygen -t rsa
При выполнении команды у нас спрашивают имя файла, не нужно ничего вводить, будет использовано имя по умолчанию. Также спрашивается пароль. Этот пароль позволяет установить дополнительную защиту — при подключении с помощью ключей не будет спрашиваться пароль пользователя, но будет спрашиваться пароль самого ключа . Устанавливать пароль необязательно. Но надо учитывать следующие, использование дополнительного шифрования имеет только один минус — необходимость вводить пароль, и несколько преимуществ:
В результате будет создано два файла: ~/.ssh/id_rsa и ~/.ssh/id_rsa.pub
Первый файл id_rsa (это приватный ключ) всегда нужно хранить в секрете. Второй файл id_rsa.pub (это публичный ключ) нужно добавить на удалённый компьютер, где запущен сервер SSH.
На удалённой машине нам нужно создать каталог .ssh. Далее нам нужно скопировать содержимое файла публичного ключа id_rsa.pub на удалённую машину в файл ~/.ssh/authorized_keys.
Обратите внимание, права на файл не должны давать возможность писать в этот файл посторонним пользователям, иначе SSH его не примет.
В публичном ключе последнее есть поле — user@machine. Оно не имеет никакого отношения к авторизации и служит только для удобства определения где чей ключ. Заметим, это поле может быть поменяно (или даже удалено) без нарушения структуры ключа.
Теперь можно выполнять подключение с помощью клиента SSH на удаленный сервер. Для это выполним команду:
ssh username@remote_host
Первый раз, когда вы заходите на сервер,SSH вас спрашивает, доверяете ли вы ключу. Если отвечаете нет, соединение закрывается. Если да — ключ сохраняется в файл ~/.ssh/known_hosts. Узнать, где какой ключ нельзя (ибо считается что это небезопасно).
Если ключ сервера поменялся (например, сервер переустановили), SSH вопит от подделке ключа. Обратите внимание, если сервер не трогали, а SSH вопит, значит вы не на тот сервер ломитесь (например, в сети появился ещё один компьютер с тем же IP, особо этим страдают всякие локальные сети с 192.168.1.1, которых в мире несколько миллионов).
Старые ключи из know_hosts при этом лучше убрать, иначе ssh будет ругаться на duplicate key.
Чтобы из файла с закрытым SSH-ключем сгенерировать и вывести на экран открытый ключ, воспользуйтесь следующей командой:
$ ssh-keygen -y -f <keyfile>
В качестве примера сгенерируем открытый SSH-ключ из закрытого ключа ~/.ssh/id_rsa и сохраним его в файл ~/.ssh/id_rsa.pub:
$ ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
Если пароль больше не будет использоваться, то для увеличения безопасности системы лучше его вовсе отключить. Но убедитесь, что ключ надежно сохранен и вы его не потеряете, потому что по паролю вы больше не войдете. Авторизуйтесь на сервере, затем откройте конфигурационный файл /etc/ssh/sshd_config и найдите там директиву PasswordAuthenticatin. Нужно установить ее значение в No:
$ sudo vi /etc/ssh/sshd_config
PasswordAuthentication no
Теперь сохраните файл и перезапустите службу ssh:
$ sudo service ssh restart
Дальше будет возможно только подключение по ключу ssh, пароль не будет приниматься.
Еще по теме
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…