воскресенье, 3 марта 2013 г.

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

Задача: требуется аутентифицировать машину Клиента (user: client_username, host: client_host) на машине Сервера (remote user: server_username, host: server_host). 
Решение:

  1. Заходим в консоль Клиента (в Windows - подключаемся через Putty на нужную Linux-машину, либо запускаем Git Bash для настройки аутентификации в git).

  2. В консоли Клиента выполняем команду для генерации ключевой пары Клиента {открытый ключ, закрытый ключ}:
    ssh-keygen -t rsa
  3. По умолчанию, в локальном домашнем каталоге Клиента, есть каталог .ssh (каталог /root/.ssh/ - если Клиент работает под root-ом, либо /home/client_name/.ssh/ - если Клиент работает с правами обычного пользователя, в Windows7 - домашний каталог пользователя Users\client_name\.ssh). В нём должны появится файлы: id_rsa.pub (открытый ключ), id_rsa (закрытый ключ).

  4. С машины Клиента подключаемся по ssh на удаленную машину Сервера, где есть зарегистрированный удаленный юзер server_username на Сервере и при первом подключении к Серверу будет выведен запрос на добавление сертификата Сервера в хранилище Клиента, с которым соглашаемся, вводя 'yes': 
    ssh server_username@server_host

  5. Копируем открытый ключ Клиента (id_rsa.pub) в удалённый домашний каталог Клиента на Сервере (каталог /root/.ssh/ - если Клиент подключился как root, либо /home/client_name/.ssh/ - если Клиент подключился как обычный пользователь). Для упрощения копирования можно использовать плагин Total Commander - Secure FTP Connections или программу winscp. При необходимости id_rsa.pub можно переименовать, например, если нужно аутентифицировать на Сервере несколько разных машин.

  6. Создаем, при необходимости, в удаленном домашнем каталоге Клиента каталог .ssh:
    mkdir ~/.ssh
  7. Задаем, при необходимости, права на каталог .ssh:
    chmod 700 .ssh

  8. Находясь в каталоге .ssh выполняем команду для помещения открытого ключа Клиента в хранилище Сервера authorized_keys, который будет в том же каталоге .ssh:
    cat id_rsa.pub >> ~/.ssh/authorized_keys
  9. Задаем, при необходимости, права на файл .ssh/authorized_keys:
    chmod 600 ~/.ssh/authorized_keys

Если все операции выполнены успешно, то в будущем аутентификация Клиента на Сервере будет происходить без запроса пароля, по сертификату. То есть, например, не будут выходить запросы на аутентификацию при копировании с помощью команды scp с Клиента на Сервер.
Например, данная инструкция может пригодиться для настройки агента TeamCity, чтобы он мог автоматически копировать файлы на указанный тестовый сервер. Или для аутентификации локальной машины в хранилище git-а. Или для упрощения копирования с одной машины на другую при помощи команды scp.