15 нояб. 2011 г.

Настройка авторизации по ключу в SSH для Oracle Solaris 11

Данная запись написана исключительно для себя, с целью не забыть как это делается. Не стоит ожидать внутри литературного стиля и прочих радостей жизни...
Автор не претендует на верность последовательности шагов, просто он сделал так и у него все заработало...

Итак, преамбула. У нас есть сервер с Oracle Solaris 11, названный, например, d3, на котором крутится sshd. И есть рабочий компьютер или ноутбук, на котором есть ssh клиент и владелец которого хочет авторизовываться на сервере по ssh без ввода пароля - по ключу.

Сначала разберемся с sshd. Настраивать в его конфиге что-то специально практически не надо - лично я просто прошерстил его на наличие StrictModes yes и PasswordAuthentication yes, сделал PermitEmptyPasswords yes и PrintMotd no.
После этого, естественно нужно рестартнуть sshd командой:
svcadm restart ssh

Теперь перейдем к рабочему компьютеру с ssh клиентом и сгенерим для текущего пользователя (из под которого мы будем запускать ssh-клиент) пару RSA ключей, закрытый и открытый:
ssh-keygen -t rsa -b 4096
Пароль должен быть пустым (просто жмите Enter). Когда ssh-keygen спросит куда девать сгенеренный закрытый ключ - будьте внимательны, если у вас уже есть пара ключей с дефолтными именами в ~/.ssh - id_rsa и id_rsa.pub!
Теперь, публичный ключ необходимо залить на наш сервер, в каталог пользователя под которым мы будем ходить на сервер через ssh. Нужно добавить содержимое файла с публичным ключом в ~/.ssh/authorized_keys и после этого можно залитый публичный ключ из каталога пользователя можно удалить. Теперь, sshd узнает наш ssh-клиент, когда тот предъявит ему соответствующий закрытый ключ.

Но sshd еще должен узнать машину, с которой мы будем заходить на сервер. Для этого нам нужен публичный RSA-ключ нашей рабочей машинки. Обычно он лежит где-то в /etc/ssh/ssh_host_rsa_key.pub. Если его там нет, то нужно стать рутом, снова запустить ssh-keygen и попросить его сохранить наш новый закрытый ключ в /etc/ssh/ssh_hot_rsa_key. Пароль оставить пустым! Публичный же ключ нужно снова залить на сервер, в каталог соответствующего пользователя, и скопировать его в ~/.ssh/known_hosts.

Остался еще один момент. По умолчанию, в сгенеренные публичные ключи добавляется имя машины, на которой они были сделаны. Но сеть, к которой я периодически подключаю свой ноутбук, слыхом не слыхивала о хосте drag0n-laptop со странным доменом drakia.planet =)
Нужно открыть файлы known_hosts и authorized_keys и для наших ключей поменять "концы" с:
ndv4QsM2DDw== drag0n@drag0n-laptop
cKXuIbxRGUw== root@drag0n-laptop
на:
ndv4QsM2DDw== drag0n@d3
cKXuIbxRGUw== root@d3
После этой правки все начинает прекрасно работать и логиниться по ssh без пароля.

Теперь, после всех манипуляций, нужно запускать ssh, указывая ему наш пользовательский закрытый ключ (ключ машины он видимо подхватывает автоматом):
ssh -i /home/drag0n/.ssh/id_rsa_d3 drag0n@192.168.1.7
И вуаля - мы в системе без всякого ввода паролей и прочих подобных процедур:

@drag0n-laptop ~$ d3ssh
Last login: Tue Nov 15 19:21:52 2011 from 192.168.1.160
      We are the Electrons.
      Resistance is voltage / current.
drag0n@d3:~$