Доступ к серверу по ssh без ввода пароля на linux

Для чего всё это нужно? Лично я не могу хранить в голове пару десятков паролей от удалённых linux серверов. К тому же их надо хранить в каком то укромном месте и вводить при подключении. Занятие не из приятных, да и чувствуется рутина... К тому же если пароль не особо надёжный - его можно взломать всевозможными способами, например перебором. В системных логах наглядно отображено, как каждый день не перестают трудиться роботы в поисках подбора паролей и нет от них спасу, разве что Denyhosts помогает. Но о чём это я? Ни для кого не секрет, что в юникс системах для удалённого доступа по ssh, альтернативе паролям, существуют ключи. Так же они используются некоторыми приложениями, например git'ом для передачи изменений в проекте, да много еще для чего... Главным образом, ключи делают доступ к серверу действительно безопасным. Не требуя ввода пароля ключ содержит алгоритм с использованием открытого ключа DSA, что обеспечивает хорошую безопасность. Сам ключ состоит из двух частей. Секретный хранится только у владельца, а публичный копируется на удаленный сервер. При этом доступ пользователя по паролю вообще можно отключить, чтобы пароль невозможно было подобрать. Ну как интересно? Думаю стоит приступить к практике: Для начала нам надо сгенерировать ключи id_rsa и id_rsa.pub следующим способом:
$ ssh-keygen -t rsa -C "you_email@example.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/example/.ssh/id_rsa):
Если требуется сохранить файл с ключём в нестандартной директории, вводим нужное, иначе просто Enter
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Парольную фразу тоже оставим пустой.
Your identification has been saved in /home/example/.ssh/id_rsa.
Your public key has been saved in /home/example/.ssh/id_rsa.pub.
После ненавязчивого извещения терминала о успешном сохранении ключей, можно приступить к подключению
$ ssh user@example.com
The authenticity of host 'example.com (77.37.152.197)' can't be established.
RSA key fingerprint is 62:60:75:09:91:e6:35:50:9f:48:fe:f2:18:a5:bd:b6.
Are you sure you want to continue connecting (yes/no)?
Вводим yes конечно же и далее пароль
user@example.com's password:
При правильном вводе пароля, мы должны успешно залогиниться. Что же делать дальше? Существует минимум 2 способа установки ключа на сервер. 1 способ: Ручное копирование ключа (всего содержимого файла) из ранее сгенерированного файла ~/.ssh/id_rsa.pub на локальной машине в файл ~/.ssh/authorized_keys на удалённом сервере. 2 способ: Использование утилиты ssh-copy-id. Воспользуемся вторым способом, так как он более краток и удобен. На локальной машине выполним следующее:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@example.com
Кстати утилита существует для всех unix'like систем, например для Ubuntu (Debian), Fedora, FreeBSD и Mac OS X. После успешного копирования, пробуем зайти на удалённый сервер еще раз. На этот раз сервер не спросил пароль, а сразу впустил в оболочку, разве не круто? Но на этом статья не заканчивается... У ssh есть очень удобная возможность создавать конфигурационный файл для хранения удалённых хостов. Рассмотрим же эту возможность. В директории .ssh создадим файл кофигурации, который так называется "config" и внесём в него некоторые данные нашего удалённого сервера:
$ vim ~/.ssh/config
host example.com #Удобочитаемое имя хоста для подключения (псевдоним)
HostName 111.222.111.222 #ip-адрес хоста или служебное доменное имя, например zoom.vps-private.net
User user #Имя пользователя
Port 22 #Порт подключения (Необязательно)
IdentityFile ~/.ssh/id_rsa #Путь к файлу с секретным ключём, если он находится не в стандартном расположении (Необязательно)
После создания данного файла, мы сожем подключиться к хосту используя удобное нам имя. Пробуем!
$ ssh example.com
Если вход на сервер успешен, позравляю!!! Возьми себе на вооружение данную возможность. Если подключение не удалось, значит читал не внимательно или возникла непреодолимая сила =) В любом случае жду комментарии к данной статье с вопросами, критикой и пожеланиями!

Who's online

There are currently 1 user and 1 guest online.