OpenSSH Public Key Authentication
31.10.2009, рубрики: Новости | Теги: network, protocol | 1 комментарий »
Привет. Сегодня поговорим о OpenSSH, а в частности об аутентификации на SSH сервере с использованием ключей. Метод Identity/Pubkey довольно популярный, прост в настройке и считается более безопасным, чем метод аутентификации по паролю. Целью использования идентификации Identity/Pubkey является исключение использования статических паролей, а использование ключей (метод открытого ключа). Метод заключается в следующем. В место того, чтобы каждый раз набирать пароль (который может быть перехвачен или подсмотрен) мы используем пару ключей, хранящихся на диске, которые и используются для проверки подлинности. Ваша учетная запись на сервере имеет список Identities/Pubkeys, которому можно доверять и если Вы сможете доказать, что у вас есть и публичный и приватный ключ, то доступ будет предоставлен без запроса пароля. Метод эффективен только если авторизация по паролям отключена.
Authentication
Вот некоторые из положительных моментов этого типа аутентификации:
- Никто не сможет войти на сервер с Вашей учетной записью, так как им необходимо обладать приватным ключом и кодовой фразой.
- Администратор сервера может вообще убрать пароль учетной записи, дабы исключить его дискредитацию.
- Вы можете использовать утилиту ssh-agent и он будет предоставлять аутентификационные данные за Вас.
- Вы можете устанавливать определенные ограничения, например запрещая перенаправление портов, выполнение определенных программ и т.д.
- Вы можете распространять публичный ключ, без угрозы для вашей учетной записи.
В этой статье мы подробно рассмотрим данный метод.
Реализация данного метода графически:

Все операции необходимо выполнять от имени вашего пользователя. Использование root привилегий крайне не приветствуется.
Первое, что нам необходимо сделать, это проверить что OpenSSH установлен у вас в системе.
- $ ssh -V
Если да…то удалите его и все конфигурационные файлы. Сделать это можно следующим образом. Система -> Администрирование -> Менеджер пакетов Synaptic как показано на рисунке.

Дабы убедиться в том, что все конфигурационные файлы были удалены, делаем так:
- $ sudo rm -rf /etc/ssh/
- $ sudo rm -rf ~/.ssh/
Теперь устанавливаем все пакеты заново.
- $ sudo aptitude install ssh openssh-client openssh-server
Системa на которых проводились тестирования:
- $ lsb_release -a
- Distributor ID: Ubuntu
- Description: Ubuntu 9.10
- Release: 9.10
- Codename: karmic
Все эти операции необходимо проделать как на Сервере так и на Клиенте.
Чем вызваны такие непонятные на первый взгляд операции? Ответ прост, не сделав этого, в конце, когда вы попытаетесь присоединиться к вашему серверу, с использованием ключей вы получите ошибку вида:
Permission denied (publickey,password,hostbased).
Теперь приступим непосредственно к созданию ключей, правкам конфигов и т.д.
Генерирование ключей выполняем только на стороне Клиента
- client$ mkdir ~/.ssh
- client$ chmod 700 ~/.ssh
- client$ ssh-keygen -q -f ~/.ssh/id_rsa -t rsa
- Enter passphrase (empty for no passphrase): …
- Enter same passphrase again: …
Не используйте пароль вашего аккаунта или пустой пароль, это может скомпрометировать безопасность. Пароль может быть до 16 символов. Далее необходимо выставить верные права для директории .ssh и ее содержимого:
- client$ chmod 700 ~/.ssh
- client$ chmod go-rwx ~/.ssh/*
Теперь вы обладатель двух ключей, которые находятся в папке .ssh:
- client$ ls -la .ssh/
- -rw------- 1 user user 1743 2009-10-31 15:38 id_rsa
- -rw------- 1 user user 397 2009-10-31 15:38 id_rsa.pub
id_rsa – приватный (секретный ключ)
id_rsa.pub – публичный ключ (можно выложить на ftp или samba)
Теперь необходимо скопировать ваш публичный ключ на сервер, перезаписать его в файл authorized_keys, и настроить конфиг сервера.
Копируем id_rsa.pub на сервер. (Для примера адрес сервера будет 192.168.1.1)
- client$ scp ~/.ssh/id_rsa.pub user@192.168.1.1:
Уберите файл id_rsa.pub из папки .ssh на съемный носитель или в зашифрованную директорию. Данное действие обязательно.
Все дальнейшие действия проводятся на стороне Сервера.
- server$ mkdir ~/.ssh
- server$ chmod 700 ~/.ssh
- server$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
- server$ chmod 600 ~/.ssh/authorized_keys
- server$ rm ~/id_rsa.pub
Пожалуй это все. Проверьте записался ли файл authorized_keys командой:
- cat authorized_keys
Теперь необходимо настроить конфиг сервера.
- server$ sudo nano /etc/ssh/sshd_config
Вот как должны выглядеть необходимые директивы в файле
- # Authentication:
- LoginGraceTime 120
- PermitRootLogin no
- StrictModes yes
- RSAAuthentication yes
- PubkeyAuthentication yes
- AuthorizedKeysFile %h/.ssh/authorized_keys
- # To enable empty passwords, change to yes (NOT RECOMMENDED)
- PermitEmptyPasswords no
- # Change to no to disable tunnelled clear text passwords
- PasswordAuthentication no
PermitRootLogin no – запретить авторизацию по руту
RSAAuthentication yes – разрешить RSA аутентификацию
PubkeyAuthentication yes – разрешить Pubkey аутентификацию
PermitEmptyPasswords no – запретить пустые пароли
PasswordAuthentication no – запретить аутентификацию по паролю
Выполняем подключение клиента к серверу
- client$ ssh -o PreferredAuthentications=publickey user@192.168.1.1
- Enter passphrase for key '/…/.ssh/id_rsa': …
- …
- server$
В дальнейшем выполняем подключение к серверу командой:
- client$ ssh -v user@192.168.1.1
Помним, user – это учетная запись на сервере.
Если вы вдруг потеряли ваш публичный ключ, его можно восстановить следующим образом:
- client$ ls -1 /etc/ssh/ssh_host_rsa_key*
- client$ cat /etc/ssh/ssh_host_rsa_key.pub
- client$ ssh-keygen -y -f /etc/ssh/ssh_host_rsa_key
Если вы потеряли ваш приватный ключ, то можете забыть о всякой аутентификации и создавать все ключи заново.
Можно еще более упростить процесс авторизации создав файл
- client$ nano .ssh/config
А в него добавить следующее:
- Host 192.168.1.1
- ServerAliveInterval 60
- User YourUserName
- Compression yes
- ForwardX11 yes
- IdentityFile ~/.ssh/id_rsa
Теперь что-бы попасть на сервер, достаточно ввести в командной строке.
- ssh 192.168.1.102
Полезные ресурсы:
Трюки, секреты SSH
OpenSSH
OpenSSH в Wikipedia


It’s perfect that people can get the mortgage loans and that opens up new possibilities.