Лупайте сю скалу...
Іван Франко


Wed 25 of Nov, 2009 [06:28 UTC]

Search Wiki PageName
Search
in:
Пані Маєш: <<Уроки>>
Тут зібрана різноманітна інформація з тих областей, які мене цікавлять. В основному це буде так чи інакше пов'язане моєю роботою (я все ще працюю системним адміністратором Юнікса) чи загальними інтересами, як то українська мова, література. Або ж з місцями мого перебування -- Київ, Токіо. Але немає ґарантії, що тут не з'явиться іще щось цікавеньке (як на мою особисту думку).

Деякі нотатки по вживанню ключів у OpenSSH

print


Чому
головне питання завжди "Нащо це потрібно?". Тому, перш, ніж приступати до опису самого процесу кілька слів про те, де можна використовувати ключі SSH.


Завдяки парам ключів (приватний ключ/відкритий ключ) SSH може виконувати команди на віддалених машинах без паролю. Зрозуміло, що в такому випадку вся секретність/безпечність SSH відпадає — якщо я можу виконувати будь-яку команду з цього комп'ютера он на тому комп'ютері, так само зможе її виконати і будь-хто, хто матиме доступ ось до цього комп'ютера. І якщо не накласти певні обмеження на те, які команди можуть виконуватися, такий режим стає серйозною діркою.

Звичайно можна захистити ключ паролем, але це підходить тільки тоді, коли ми працюємо в командному рядку і використовуємо при цьому ssh-agent. Але що робити, коли потрібно виконувати команду на віддаленій машині в автоматизованому режимі: з cron'а наприклад. Відкривати повністю доступ до віддаленої машини?

Ні. Ключі можна певним чином настроїти так, що вони дозволять виконання тільки певних команд і(або) тільки з певних машин. Ось про це далі і йдеться.

Для того, щоб виконувати команди за допомогою SSH без потреби друкувати кожного разу пароль можна скористатися парою з привантного та відкритого ключів. Для того, щоб створити такі ключі використовується команда ssh-keygen :

Створення пари ключів

Створення ключів
# ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (//.ssh/id_dsa): <-- Якщо Ви не вказали назву файла для запису ключа з командного рядка (параметром -f filename ), ключі записуються звично в файл ~/.ssh/id_dsa Enter passphrase (empty for no passphrase): <-- Якщо ці ключі будуть виконуватися для виконання команд на віддаленій машині в автоматичному режимі, НЕ ПОТРІБНО вводити пароль. Просто натисніть Enter Enter same passphrase again: Your identification has been saved in //.ssh/id_dsa. Your public key has been saved in //.ssh/id_dsa.pub. The key fingerprint is: 57:cf:33:5c:7b:ed:4a:df:7c:1e:f4:3d:2c:d8:c4:8d root@localhost #

Для виконання команд в автоматичному режимі потрібно мати окрему пару ключів на кожну виконувану команду. Ось чому краще вказувати назву файла в командному рядку при створенні ключів параметром -f .

Після виконання команди ssh-keygen Ви будете мати два файли: filename і filename.pub (або id_dsa і id_dsa.pub при використанні стандартних імен.

Встановлення відкритих ключів на віддаленому сервері

Для того, щоб мати можливість виконувати команди на віддаленій машині, Вам потрібно встановити відкриті половини ключів там. Приватна частина ключів повинна залишатися приватною, доступ до неї має бути тільки у Вас.

Щоб ключ розпізнавався процесом ssh, він повинен знаходитися у файлі ~/.ssh/authorized_keys2. Цей файл може мати кілька ключів. Ключі просто йдуть один за одним в файлі (команда cat >> допоможе в цьому випадку). Команда, показана далі, допоможе встановити ключі на віддаленій машині і встановити потрібні дозволи на теку ~/.ssh. Якщо дозволи не цю теку і файли в ній не такі, як потрібно, дуже ймовірно, що ssh не буде працювати, так як хочеться.

Копіювання ключів на віддалену машину
# cd ~/.ssh # # В командах далі змініть назву машини та ключів на свої # cat id_dsa.pub | ssh remotehost.domain.com "(mkdir .ssh; chmod 700 .ssh; chdir .ssh; touch authorized_keys2; chmod 600 authorized_keys2; cat - >> authorized_keys2)" # [... тут буде запитання про пароль... ] # ssh remotehost.domain.com date <- Після встановлення ключів на віддаленій машині, можна виконувати команд без паролю Fri Aug 20 18:53:12 JST 2004 #


Ключі у файлі ~/.ssh/authorized_keys2

  1. Стандартним чином створені ключі не мають ніяких додаткових параметрів;
    Це означає, що після встановлення таких ключів на віддаленій машині, будь-яка команда може виконуватися на цій машині, будь-ким, хто має доступ до приватного ключа (з пріоритетом того користувача, в домашній теці якого встановлена відкрита частина ключа). Тобто, якщо Ви залишите файл приватного ключа з дозволами на читання для будь-кого крім самого себе, це створить серйозну дірку в безпеці Вашої машини (віддаленої). Не завадить зайвий раз виконати команду:
    chmod 600 ~/.ssh/id_dsa
  2. У файлі ~/.ssh/authorized_keys2 може також знаходитися додаткова інформація:
    1. Коментарі — будь-який рядок, що починається з # вважається коментарем і повністю ігнорується ssh;
    2. Примусове виконання команд;
    3. Машини, яким дозволено з'єднуватися з використанням даного ключа;
    4. Всі додаткові параметри в ключах мають бути розділені комами пари типу '<parameter>=<value>'. Між параметрами не допускаються пропуски.

Встановлення доступу до ключів тільки для визначених хостів

Додавши параметр from= в файл відкритих ключів можна змусити сервер sshd розпізнавати тільки команди з визначених машин.
Додайте для цього рядок from=<hostname> в файл ключа як параметр:
from=mysecurehost1,securehos2,192.168.1.2
Назви хостів в цьому параметрі повинні стояти через кому і без пропусків.

Обмеження команди, яка дозволяється для виконання по ключу

Додайте параметр command=<UNIX command> в файл ключа.

Приклад ключа з параметрами from і command

Примітка
Ключі в цьому прикладі розірвані на кілька рядків для полегшення читання. В справжньому житті кожен ключ, це один (дуже довгий) рядок.

Початковий вигляд ключа
ssh-dss AAAAB3NzaC1kc3MAAACBALtbYF/Hzpe6buZTDbW2xsAXZJ0EQlJe6hlatW6xJ8zbcZ1qnaom hrCIDzmlIegdfGHCaIuG9zRgcyq9YrIMSgJenSbdOZSYCaf4FKm6BnN+7dmweng7e5/gClF0Q82x8QOT NuTNP/+0HZd301IR21L2n7nY/98k9viNZjogyVbNAAAAFQCH/cImMhhyNLi2IAS+tMbtgYwqKQAAAIBw pXmINNDmcgAGGeHaQLS6sLxQnkAB+9KMVnNXgJ2zhIrcQNxDourwrPwQhM4J6Y/fwFoE0XPNceHSxKQP cP+uvJPwEmwj6ypj9BwIpR765GbL5qzgZnHbmmOqKOybG09P34PXOikjhlakdsjfhiu[,KKkLlkj9878 9&KJljkhghgAAIA7dGPD/fUy7bUY26Xxx1KB+zIz9Y+YxRDC+CvUiPEhYD2LciEkWWg4EHX1lpEvzl0v 7EBEoFxDPEEmsmGRwXBKta/I/+uAuuuFuwjx4910al13AOjEbwSKg86fLI7PPHx6ZinlaJU3kljhasdf oiuy<MNBjklhg100zFxxDYr7IQ== root@remote


Ключ з доданими коментарями і параметрами command
# # This is a comment. Key is generated for bla-bla-bla, by ..... # command="/bin/uname -a",from="securehost2.domain.com" ssh-dss AAAAB3NzaC1kc3MAAACBALtbYF/Hzpe6buZTDbW2xsAXZJ0EQlJe6hlatW6xJ8zbcZ1qnaomhrCI DzmlIegdfGHCaIuG9zRgcyq9YrIMSgJenSbdOZSYCaf4FKm6BnN+7dmweng7e5/gClF0Q82x8QOTNuTN P/+0HZd301IR21L2n7nY/98k9viNZjogyVbNAAAAFQCH/cImMhhyNLi2IAS+tMbtgYwqKQAAAIBwpXmI NNDmcgAGGeHaQLS6sLxQnkAB+9KMVnNXgJ2zhIrcQNxDourwrPwQhM4J6Y/fwFoE0XPNceHSxKQPcP+u vJPwEmwj6ypj9BwIpR765GbL5qzgZnHbmmOqKOybG09P34PXOiKuB9Kj65DYVEI9SL5XdBt1bunoGjJ5 RpyZlgAAAIA7dGPD/fUy7kjlhadslfkym,Yhlm,nblkJHLJhlkjasdhfkjhlkjhkjhIUUUYkzl0v7EBE oFxDPEEmsmGRwXBKta/I/+uAuuuFuwjx4910al13AOjEbwSKg86fLI7PPHx6ZinlaJU3UNL9Pz0H47et mxJpxPricdfaaasdfJHkuL== root@remote

Після встановлення такого ключа на машині remotemachine дозволить виконання однієї-єдиної команди /bin/uname -a з машини securehost2 без пароля.






This is Tiki v1.8.5 (CVS) -Polaris- © 2002–2004 by the Tiki community     Created by: dmytro last modification: Wednesday 29 of September, 2004 [06:22:59 UTC] by dmytro





дмитро ковальов