пятница, 18 апреля 2014 г.

Доступ к SSH без ввода пароля или настройка ключей

Возможно, эта тема мало кого заинтересует, но когда-то я столкнулся с тем, что решил найти способ получения доступа по ssh без ввода пароля. Я не знал тогда о существовании способа авторизации при помощи ключей, поэтому в поиск вводил "доступ к ssh без ввода пароля", на то время (пару лет назад) ничего толкового не находил, или это было слишком сложно для меня. Поэтому я и решил написать эту статью в надежде, что кому-то она пригодится.

И так, авторизация через ssh может проходить не только при вводе пароля, а посредством обмена ключами. На клиентской машине хранится пара ключей, закрытый и открытый ($HOME/.ssh/id_rsa и $HOME/.ssh/id_rsa.pub соответственно). На сервере может существовать файл $HOME/.ssh/authorized_keys, содержащий в себе открытые ключи клиентов. Если открытый ключ клиентской машины содержится в этом файле сервера, то авторизация и последующее шифрование происходит при помощи этого ключа.

Следовательно, необходимо выполнить 2 шага:

  1. Генерация пары ключей на клиенте.

  2. Запись открытого ключа клиента в файл authorized_keys сервера.

Генерация ключей

Для генерации пары ключей предназначена команда ssh-keygen, которая доступна, если у вас установлен ssh-клиент. Она очень проста в использовании. Что бы создать пару ключей, нужно лишь запустить её без параметров. Сначала она спросит файл для записи закрытого ключа, тут можно ничего не вводить, просто нажать enter, чтобы создать файл по умолчанию. Далее вводим пароль. Если не вводить ничего, то закрытый ключ будет незашифрованный, и, получив к нему доступ, можно получить доступ ко всем серверам, на которые у вас настроена авторизация с помощью этого ключа. Поэтому нужно дать минимальные права для файла ключей. Если ввести пароль, то каждый раз придётся вводить этот пароль при входе на любой сервер, настроенный на этот ключ.

Запись ключа на сервер

Здесь можно поступить несколькими способами, первый из них - зайти на сервер и скопировать содержимое файла id_rsa.pub в authorized_keys, например, следующей командой:

$ cat ~/.ssh/id_rsa.pub | ssh user@host "tee -a ~/.ssh/authorized_keys"

где user и host - имя пользователя и адрес сервера, соответственно. От вас потребуется ввести пароль от аккаунта user на сервере host, после чего авторизация будет проходить при помощи ключей. В дальнейшем нужно будет вводить пароль от ключа или не вводить ничего, если ключ не зашифрован.

Второй способ доступен, по крайней мере, в debian - использование команды ssh-copy-id. После генерации ключей по умолчанию достаточно ввести:

$ ssh-copy-id user@host

Дальнейший процесс аналогичен предыдущему способу.

Комментариев нет:

Отправить комментарий