RSA/DSA аутентификация в OpenSSH
- Данная статья 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. $