RSA/DSA аутентификация в OpenSSH

Материал из OpenBSD-Wiki
Перейти к: навигация, поиск
Данная статья 100 % копипаст с www.openbsd.ru

Что это такое?

OpenSSH — замена стандартных уязвимых протоколов, таких как telnet или rsh. OpenSSH использует шифрованный канал для передачи данных. В нем могут быть задействованы алгоритмы аутентификации RSA или DSA.

Эти протоколы основаны на базе специально созданной паре ключей, а именно публичном и приватном ключах. Это асимметричные алгоритмы шифрования, то есть мы можем зашифровать информацию одним ключом, а расшифровать другим, в отличие, например от DES, где используется один и тот же ключ для шифрования и расшифровки информации.

Первым делом следует сгенеровать пару ключей. Опцией -t мы задаём тип ключа. Доступны следующие типы ключей: rsa, dsa для протокола SSH 2 и rsa1 для SSH 1.

$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/dfa/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/dfa/.ssh/id_dsa.
Your public key has been saved in /home/dfa/.ssh/id_dsa.pub.
The key fingerprint is:
27:33:40:91:0f:81:df:0a:87:f5:58:60:bb:28:c8:ad dfa@zinc

Далее, если необходимо, указываем место, куда сохранить ключ, по умолчанию предлагается /home/$USER/.ssh/id_dsa. Если ввести пароль, наш приватный ключ будет зашифрован, и для того чтобы позднее воспользоваться этим ключом, нам необходимо будет вводить данный пароль. Публичный ключ имеет суффикс .pub.

При использовании беспарольной аутентификации любой, кто имеет доступ к приватному ключу, может беспрепятственно проникнуть на удалённую машину, для которой этот ключ используется.

Публичный ключ не представляет угрозу для безопасности, мы можем пересылать его по email или по ftp.

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

Беспарольная аутентификация

После успешной генерации ключей необходимо скопировать публичный ключ на удалённую машину в файл ~/.ssh/authorized_keys:

$ scp ~/.ssh/id_dsa.pub cvs.openbsd.ru:~/.ssh/authorized_keys
dfa@cvs.openbsd.ru password:
id_dsa.pub 100 % |***************************|   598 00:00

Пример файла конфигурации клиента ~/.ssh/config:

Host cvs.openbsd.ru
IdentityFile ~/.ssh/id_dsa
RSAAuthentication yes

Host anoncvs.ca.openbsd.org
Compression no

Host *
Cipher blowfish
Compression yes
EscapeChar ~
Port 22
Protocol 2,1
User dfa

Пробуем присоединиться к удалённой машине cvs.openbsd.ru

$ ssh cvs.openbsd.ru
OpenBSD 3.0-current (RUOBSD) #19: Sat Dec 1 11:57:43 NOVT 2001

Welcome to OpenBSD: The proactively secure Unix-like operating system.

$

Парольная аутентификация с использованием ssh-agent

ssh-agent — специальная программа-демон, которая разработана для протоколов аутентификации RSA/DSA и применяется для хранения парольной фразы приватного ключа. Используя эту программу, вы можете соединяться с удалённой машиной, не набирая пароль, и при этом ваши приватные ключи остаются защищёнными. Клиент ssh поддерживает ssh-agent и может взаимодействовать с ней.

Ключи и их пароли добавляются к ssh-agent только один раз, используя ssh-add, и далее ssh будет обращаться к ssh-agent для определения парольной фразы для данного приватного ключа.

При запуске ssh-agent, в зависимости от вашего $SHELL, выводит команды для установки переменных окружения:

 $ ssh-agent
 SSH_AUTH_SOCK=/tmp/ssh-jyw17290/agent.17290; export SSH_AUTH_SOCK;
 SSH_AGENT_PID=8809; export SSH_AGENT_PID;
 echo Agent pid 8809;
 $

ssh-agent открывает сокет для взаимодействия с ssh и сообщает об этом через переменную окружения $SSH_AUTH_SOCK, а также сообщает свой уникальный идентификатор процесса, который установлен в переменной окружения $SSH_AGENT_PID и выводится командой echo.

Правильный запуск ssh-agent, используя встроенную в оболочку команду eval, выполняется следующим образом:

$ eval `ssh-agent`
Agent pid 17522
$

Или можно задать программу, использующую ssh, как аргумент ssh-agent. В данном случае — это командный интерпретатор ksh:

$ ssh-agent /bin/ksh
$ env | grep SSH
SSH_AUTH_SOCK=/tmp/ssh-SAe17087/agent.17087
SSH_AGENT_PID=20652
$

Теперь, используя ssh-add, необходимо добавить ключ и парольную фразу к нему:

$ ssh-add ~/.ssh/id_dsa
Enter passphrase for /home/dfa/.ssh/id_dsa:
Identity added: /home/dfa/.ssh/id_dsa (/home/user/.ssh/id_dsa)
$

Пробуем присоединиться к удалённой машине cvs.openbsd.ru

$ ssh cvs.openbsd.ru
OpenBSD 3.0-current (RUOBSD) #19: Sat Dec 1 11:57:43 NOVT 2001

Welcome to OpenBSD: The proactively secure Unix-like operating system.

$