Saturday, September 23rd, 2017

Аутентификация на SSH сервере с использованием ключей

Published on Апрель 7, 2009 by   ·   Комментариев нет

OpenSSH кроме паролей поддерживает еще несколько методов аутентификации. Он может быть сконфигурирован на использование методов PAM (Pluggable authentication modules), протокола Challenge/Response, Kerberos, аутентификации по доверенным хостам и такая экзотика как ключи X509. Но самым популярным является метод Identity/Pubkey.

Целью использования идентификации Identity/Pubkey является исключение использования статических паролей. Вместо того, чтобы каждый раз набирать пароли, которые могут быть перехвачены кейлоггером или просто подсмотрены, у нас на диске имеется пара ключей, которые и используются для проверки подлинности. Ваша учетная запись на сервере SSH имеет список Identities/Pubkeys, которому можно доверять и если Вы сможете доказать, что у вас есть и публичный и приватный ключ, то доступ будет предоставлен без запроса пароля.

Вот некоторые из положительных моментов этого типа аутентификации:

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

В этой статье мы рассмотрим методу создания ключей и конфигурирование учетной записи.
Создание Identity/Pubkey
В оригинальной реализации SSHv1 Вы могли создать Identity, которое было парой RSA публичного и приватного ключей. В SSHv2 формат этих ключей был изменен, стали поддерживаться ключи RSA и DSA, и эта аутентификация была переименована в Pubkey. В контексте данной статьи эти обозначения будут использоваться взаимозаменяемо, так как реализуют идентичные функции.

С помощью утилиты ssh-keygen создадим необходимые ключи:

      mydesktop$ ssh-keygen -t rsa
        Generating public/private rsa key pair.
        Enter file in which to save the key (/home/xahria/.ssh/id_rsa):
        Enter passphrase (empty for no passphrase): (enter passphrase)
        Enter same passphrase again: (enter passphrase)
        Your identification has been saved in /home/xahria/.ssh/id_rsa.
        Your public key has been saved in /home/xahria/.ssh/id_rsa.pub.
        The key fingerprint is:
        2c:3f:a4:be:46:23:47:19:f7:dc:74:9b:69:24:4a:44 xahria@mydesktop
       
       
      mydesktop$ cd $HOME/.ssh
      mydesktop$ ls -l
        -rw-------    1 xahria   hatchclan   883 Jan 21 11:52 id_rsa
        -rw-r--r--    1 xahria   hatchclan   223 Jan 21 11:52 id_rsa.pub
       
      mydesktop$ cat id_rsa
        -----BEGIN RSA PRIVATE KEY-----
        MIICWgIBAAKBgQCc+1oixZ/g84gpZH0NeI+CvVoY5O0FOCSpFCbhUGJigQ6VeKI5
        gpOlDztpJ1Rc+KmfZ2qMaftwwnLmefhk1wPcvfZvvLjfdmHY5/LFgDujLuL2Pv+F
        7tBjlyX9e9JfXZau2o8uhBkMbb3ZqYlbUuuoCAnUtL5uZUiiHM0BAtnGAd6epAYE
        gBHw1xnqsy+mzbuWdLEVF7crlUSsctwGapb6/SEQgEXFm0RITQ3jCY808NjRS3hW
        Z+uCCO8GGUsn2bZpcGXa5vZzACvZL8epJoMgQ4D0T50rAkEA0AvK4PsMF02Rzi4E
        mXgzd1yCa030LYR/AkApG1KT//9gju6QCXlWL6ckZg/QoyglW5myHmfPR8tbz+54
        /lj06BtBA9iag5+x+caV7qKth1NPBbbUF8Sbs/WI5NYweNoG8dNY2e0JRzLamAUk
        jK2TIwbHtE7GoP/Za3NTZJm2Ozviz8+PHPIEyyt9/kzT0+yo3KmgsstlqwIBIwKB
        XdBh42izEWsWpXf9t4So0upV1DEcjq8CQQDEKGAzNdgzOoIozE3Z3thIjrmkimXM
        J/Y3xQJBAMEqZ6syYX/+uRt+any1LADRebCq6UA076Sv1dmQ5HMfPbPuU9d3yOqV
        j0Fn2H68bX8KkGBzGhhuLmbrgRqr3+SPM/frUj3UyYxns5rnGspRkGB3AkALCbzH
        9EAV8Uxn+Jhe5cgAC/hTPPdiwTJD7MpkNCpPuKRwrohytmNAmtIpKipAf0LS61np
        wtq59ssjBG/a4ZXNn32n78DO0i6zVV5vwf8rv2sf
        -----END RSA PRIVATE KEY-----
       
      mydesktop$ cat id_rsa.pub
          ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAcMJy5nn4ZNcD3L32b7y433Zh2IEAnPt
          aIsWf4POIKWR9DXiPgr1aGOTtBTgkqRQm4VBiYoEOlXiiOYKTpQ87aSdUXPipn
          2dqjGn7OfyxYA7oy7i9j7/hYytkyMGx7ROxqD/2WtzU2SZtjs74s/PjxzyBMsr
          ff5M09PsqNypoLLLZas= xahria@mydesktop

Обратите внимание, что 'ssh-rsa…xahria@mydesktop' это одна строка, а не несколько.

Как Вы могли убедиться, ssh-keygen создал два файла: id_rsa и id_rsa.pub. В первом файле хранится приватный ключ, защищенный кодовой фразой, введенной Вами при создании, НИКОМУ не давайте копаться в этом файле. Второй файл — Ваш публичный ключ, он не содержит никаких тайн и может быть доступен любому встречному-поперечному. В случае утраты он может быть восстановлен из приватного ключа.
Типы ключей SSH
При создании ключей Вы указывали опцию -t rsa. Этим параметром мы указываем тип создаваемых ключей. Также возможно создать ключи rsa1, rsa или dsa. Рассмотрим их отличия:

Тип

Аргумент

Имя по умолчанию

Протокол

Пример заголовка
RSA1

-t rsa1
 
identity
 
SSH 1 protocol only
 
1024 35 118118225938285...
RSA
 
-t rsa
 
id_rsa
 
SSH 2 protocol only
 
ssh-dss AAAAB3nzaC1kc3M...
DSA
 
-t dsa
 
id_dsa
 
SSH 2 protocol only
 
ssh-rsa AAAAB3NzaC1yc2E...

Вы можете изменить имя файла с помощью опции -f filename. Если Вы не определили имя файла, то ключи будут записаны в каталог $HOME/.ssh/ с именем, принятым по умолчанию для данного типа ключа.
Разрешение Identity/Pubkey аутентификации на сервере
После того, как мы создали ключи, необходимо разрешить данный тип аутентификации на сервере SSH. Сначала определим тип аутентификации — Pubkey или Identity, установив следующие настройки в sshd_config:

      # Should we allow Identity (SSH version 1) authentication?
      RSAAuthentication yes
       
      # Should we allow Pubkey (SSH version 2) authentication?
      PubkeyAuthentication yes
       
      # Where do we look for authorized public keys?
      # If it doesn't start with a slash, then it is
      # relative to the user's home directory
      AuthorizedKeysFile    .ssh/authorized_keys

Приведенные выше значения разрешают аутентификацию Identity/Pubkey для протокола SSH версии 1 и 2, и проверяют наличие публичных ключей в файле $HOME/.ssh/authorized_keys.

Проверьте наличие этих строк в файле конфигурации sshd_config (обычно он находится в каталоге /etc/ssh/), при необходимости добавьте и перезапустите сервис.
Содержимое файла authorized_keys
Файл authorized_keys просто содержит список ключей, по одному в строке. В него мы и пропишем ключ, сгенерированный нами на своей машине.

      # Copy the RSA Pubkey to the server using scp.
      # You can use any method you like, including using
      # copy/paste if it's convenient.
      mydesktop$ cd $HOME/.ssh
      mydesktop$ scp id_rsa.pub ssh-server:id_rsa_mydesktop.pub
      xahria@ssh-server's password: (enter password)
       
      # Now let's log in and create the authorized_keys file
      mydesktop$ ssh ssh-server
      xahria@ssh-server's password: (enter password)
       
      # Create the .ssh dir if it doesn't already exist
      ssh-server$ mkdir .ssh
      ssh-server$ chmod 700 .ssh
      ssh-server$ cd .ssh
       
      # Concatenate the RSA Pubkey we just uploaded to
      # the authorized_keys file.  (This will create
      # if it doesn't already exist.)
      ssh-server$ cat ../id_rsa_mydesktop.pub >> authorized_keys
       
      # Let's check out the file
      ssh-server$ cat authorized_keys
      ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAcMJy5nn4ZNcD3L32b7y433Zh2IEAnPt
        aIsWf4POIKWR9DXiPgr1aGOTtBTgkqRQm4VBiYoEOlXiiOYKTpQ87aSdUXPipn
        2dqjGn7OfyxYA7oy7i9j7/hYytkyMGx7ROxqD/2WtzU2SZtjs74s/PjxzyBMsr
        ff5M09PsqNypoLLLZas= xahria@mydesktop
       
      # Make sure permissions are paranoid
      ssh-server$ chmod 600 authorized_keys
       
      # Excellent, let's log out.
      ssh-server$ exit

Прядок действий следующий: копируем публичный ключ RSA на сервер, используя scp или любой другой способ. Создаем файл authorized_keys, если каталога .ssh не существует — создаем. Добавляем публичный ключ RSA в файл authorized_keys. Проверяем, устанавливаем права доступа и выходим.

Пришла пора проверить. что мы наваяли:

      mydesktop$ ssh ssh-server
      Enter passphrase for key '/home/xahria/.ssh/id_rsa':

Ваш SSH клиент будет сначала пробовать пройти аутентификацию по Pubkey/Identity, в случае неудачи — идентификацию по паролю. Он будет искать три имени файлов, заданных по умолчанию, если Вы не указали айл ключа явно и передаст его серверу.

Рассмотрим процесс подключения по разделениям:

* /usr/bin/ssh соединяется с сервером на порт SSH
* Клиент и сервер обмениваются ключами, определяется алгорит м шифрования
* Клиент ищет файлы, по умолчанию испрользуемые Pubkey/Identity
* Если один из таких файлов был найден, то посылается публичный ключ на сервер и запрашивается аутентификация по этому ключу
* Сервер проверяет файл authorized_keys пользователя на наличие публичного ключа и посылает клиенту последовательность, зашифрованную открытым ключом . Если приватный ключ защищен кодовым словом, то /usr/bin/ssh просит его ввести для дешифровки приватного ключа.
* Клиент расшифровывает посланную последовательность для подтверждения правильности публичного и приватного ключей
* Если расшифровка удалась, то сервер пускает клиента без запроса пароля Unix
* Если клиент не может доказать, что это имеет ключ, то он может предложить другие ключи
* При отсутствии корректных ключей пользователю будет предложено авторизоваться с помощью авторизации Unix

Все это проходит незаметно для пользователя. Если Вы хотите наблюдать за фазами соединения, то используйте ключ -v:

      mydesktop$ ssh ssh-server
      OpenSSH_3.8.1p2, SSH protocols 1.5/2.0, OpenSSL 0x009060cf
      ...
      debug1: identity file /home/xahria/.ssh/identity type 0
      debug1: identity file /home/xahria/.ssh/id_rsa type 1
      debug1: Remote protocol version 1.99, remote software version OpenSSH_3.7.1p2
      ...
      debug1: SSH2_MSG_SERVICE_ACCEPT received
      debug1: Authentications that can continue: publickey,password,keyboard-interactive
      debug1: Next authentication method: publickey
      debug1: Offering public key: /home/xahria/.ssh/id_rsa
      debug1: Server accepts key: pkalg ssh-rsa blen 149 lastkey 0x601d0 hint 1
      debug1: PEM_read_PrivateKey failed
      debug1: read PEM private key done: type
      Enter passphrase for key '/home/xahria/.ssh/id_rsa': (Enter wrong passphrase)
       
      debug1: PEM_read_PrivateKey failed
      debug1: Next authentication method: keyboard-interactive
      debug1: Authentications that can continue: publickey,password,keyboard-interactive
      debug1: Next authentication method: password
      xahria@ssh-server's password:  (Enter Unix password)

Для наглядности, в этом примере мы вводим неправильное кодовое слово для дешифровки приватного ключа. Также Вы можете заметить, что были найдены файлы identity и id_rsa, хотя они могут использоваться только с SSHv2.
Выбор ключей
Если Вы имеете один ключ для каждого типа, то вы можете использовать стандартные имена файлов и ssh-клиент самостоятельно найдет их и использует, но может так случиться, что Вы используете для аутентификации разные файлы:

У Вас есть персональный ключ и ключ группы(например, административный), для различных хостов и пользователей. У Вас слишком большой список ключей и сервер отбрасывает вас из-за превышения числа попыток авторизации. Вы хотите использовать специальный ключ, потому как связали с ним специфические особенности — такие как предоставление возможности работать только с командой rsync.

Определить используемый ключ можно с помощью опции -i private_key_file:

      mydesktop$ ssh -i ~/.ssh/special_ssh_key  ssh-server
      Enter passphrase for key '/home/xahria/.ssh/special_ssh_key':

Следущая опция создаст в Вашем ~/.ssh/config указание на отображение еспользуемого ключа:

      mydesktop$ cat ~/.ssh/config
       Host ssh-server
       IdentityFile ~/.ssh/special_ssh_key
       
      mydesktop$ ssh ssh-server
      Enter passphrase for key '/home/xahria/.ssh/special_ssh_key':

Обратите внимание, что переменная config всегда равна IdentityFile, независимо от того, используется Pubkey или Identity.
Безопасность кодовой фразы
Ваши приватные ключи могут и должны шифроваться кодовой фразой, так как это оберегает Ваш ключ от компрометации. Даже если Вы установили соответствующие права доступа, но не защитили ключь кодовой фразой, без всяких проблем полюбоваться Вашим ключом сможет пользователь root. Так что не спускайте на тормозах это дело.
authorized_keys2
Старые версии OpenSSH использовали два различных публичных ключа для доступа к серверу — authorized_keys для Identities (SSHv1) и authorized_keys2 для Pubkeys (SSHv2). Позже было решено, что это глупо и теперь используется один файл для ключей всех типов, но при отсутствии подходящего ключа будет проверен и authorized_keys2. Более поздние версии OpenSSH могут вполне прекратить поддерживать authorized_keys2 вовсе.

Чтобы не думать об этом ограничении, создадим жесткую ссылку authorized_keys2 на файл authorized_keys.

      ssh-server$ cd .ssh
      ssh-server$ ls -l
      -rw-------    1 xahria   hatchclan   883 Jan 21 11:52 authorized_keys

      # make a hard link so they are the same file, just different
      # file names.
      ssh-server$ ln authorized_keys authorized_keys2

      ssh-server$ ls -l
      -rw-------    2 xahria   hatchclan   883 Jan 21 11:52 authorized_keys
      -rw-------    2 xahria   hatchclan   883 Jan 21 11:52 authorized_keys2
essay writing service

Так мы удовлетворим потребности любой версии OpenSSH.

zp8497586rq



























Смотрите также:

Readers Comments (Комментариев нет)

Comments are closed.

Exchange 2007

Проведение мониторинга Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 3)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Проведение мониторинга Exchange 2007 с помощью диспетчера System ... [+]

Практическое рассмотрение перехода с Exchange 2003 на Exchange 2007 (часть 1)

Введение В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 2)

Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ... [+]

Мониторинг Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 2)

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ... [+]

Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 5)

Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам: Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1) ... [+]

Установка и настройка Exchange 2007 из командной строки (Часть 3)

If you missed the previous parts in this article series please read: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 1)

Инструмент ExRCA Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями: Тест подключения Outlook 2007 Autodiscover Тест подключения Outlook 2003 RPC ... [+]

Развертывание сервера Exchange 2007 Edge Transport (часть 5)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Развертывание сервера Exchange 2007 Edge Transport (часть 1) Развертывание ... [+]

Установка и настройка Exchange 2007 из командной строки (часть 2)

Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование интегрированных сценариев Using Exchange Server 2007 – часть 2: генерирование отчетов агента Transport AntiSpam Agent

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ... [+]