Аутентифікація на ssh сервері з використанням ключів
OpenSSH крім паролів підтримує ще кілька методів аутентифікації. Він може бути налаштований на використання методів PAM (Pluggable authentication modules), протоколу Challenge / Response, Kerberos, аутентифікації по довірених хостів і така екзотика як ключі X509. Але найпопулярнішим є метод Identity / Pubkey.
Ось деякі з позитивних моментів цього типу аутентифікації:
- Ніхто не зможе увійти на сервер з вашим профілем, так як їм необхідно володіти приватним ключем і кодовою фразою.
- Адміністратор сервера може взагалі прибрати пароль облікового запису, щоб виключити його дискредитацію.
- Ви можете використовувати утиліту 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. Розглянемо їх відмінності:
Ви можете змінити ім'я файлу за допомогою опції -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 does not 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
# 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 does not 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 does not 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. Перевіряємо, встановлюємо права доступу і виходимо.
[Ad name = "Google Adsense»]
Прийшла пора перевірити. що ми наваяли:
mydesktop $ ssh ssh-server
Enter passphrase for key '/home/xahria/.ssh/id_rsa':
Ваш SSH клієнт буде спочатку пробувати пройти аутентифікацію по Pubkey / Identity, в разі невдачі - ідентифікацію по паролю. Він буде шукати три імені файлів, заданих за замовчуванням, якщо Ви не вказали файл ключа явно і передасть його серверу.
Розглянемо процес підключення за розподілом:
Все це проходить непомітно для користувача. Якщо Ви хочете спостерігати за фазами з'єднання, то використовуйте ключ -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-клієнт самостійно знайде їх і використовує, але може так трапитися, що Ви використовуєте для аутентифікації різні файли:
Визначити використовуваний ключ можна за допомогою опції -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
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
Так ми задовольнимо потреби будь-якої версії OpenSSH.
[Ad name = "Google Adsense»]