AddThis Smart Layers

воскресенье, 24 января 2016 г.

Настройка репликации rsync по SSH без пароля

При работе с кластерами часто необходимо делать синхронизацию файлов (репликацию) при помощи команды rsync.
Другим примером использования данной команды будет перенос файлов с одного сервера на другой при апгрейде или для создания резервных копий данных.

Если при одноразовом использовании rsync чаще всего вопросов нет, то при автоматизации процесса репликации возникает проблема авторизации.
Ведь при репликации файлов между серверами при помощи команды rsync мы устанавливаем соединение с удаленным сервером и каждый раз будет затребован пароль для идентификации пользователя.
Нам же нужно автоматизировать выполнение команды так, чтобы пароль не требовался, но при этом ни в коем случае нельзя нигде хранить пароль в текстовом виде.


В общем виде команда для репликации файлов будет выглядеть так:
# rsync -avz -e ssh /home/user/ user@192.168.0.2:/home/user/

При помощи команды выше мы синхронизируем содержимое пользовательской директории /home/user/ на локальном сервере в идентичную директорию на сервере 192.168.0.2, при этом мы должны идентифицироваться под пользователем user@192.168.0.2.

В стандартном случае, после запуска этой команды система попросит авторизоваться:
user@192.168.0.2's password:
И до тех пор, пока пароль не будет указан команда не будет выполнена.

Для того, чтобы можно было получать доступ к удаленному серверу без авторизации нам нужно сделать несколько довольно простых шагов.

1. Генерация пары ключей при помощи ssh-keygen


# ssh-keygen

При этом система запросит ввести ключевую фразу (пароль) либо оставить ее пустой
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Данный мануал не призван объяснять основы и принципы сетевой безопасности, поэтому напишу лишь буквально в двух словах об этом.
На самом деле, метод идентификации при помощи пары ключей является более надеждым чем идентификация при помощи обычного пароля лишь в том случае, когда используется двухуровневая авторизация. Т.е. недостаточно иметь пару ключей, нужно еще знать пароль (ту самую ключевую фразу). Если же пароля нет, то теоретически злоумышленник запросто получает доступ к удаленному серверу.

Но, как я уже написал, это тема для отдельной статьи.
Здесь же, для того чтобы упросить задачу мы намеренно создаем пару ключей без пароля.

2. Копирование публичного ключа на удаленный сервер


# ssh-copy-id user@192.168.0.2

При этом система попросит ввести пароль пользователя user@192.168.0.2

Примечание: Команда ssh-copy-id по умолчанию пытается подключаться к удаленному серверу по порту 22. Если же этот порт закрыт и доступ по ssh возможен по другому порту, например 2020, необходимо указывать это явно.
# ssh-copy-id "user@192.168.0.2 -p 2020"

После того как публичная часть ключа была успешно скопированна на удаленный сервер попытаемся подключиться к нему еще раз.
# ssh user@192.168.0.2

Либо, в случае когда используется нестандартный порт, например 2020:
# ssh user@192.168.0.2 -p 2020

На этот раз пароль запрошен не будет.

2. Синхронизация файлов при помощи rsync

Еще раз запустим синхронизацию при помощи rsync
# rsync -avz -e ssh /home/user/ user@192.168.0.2:/home/user/

В случае с нестандартным портом команда будет выглядеть следующим образом:
# rsync -avz -e 'ssh -p 2020' /home/user/ user@192.168.0.2:/home/user/

Если все пункты выше были сделаны корректно, команда должна отработать не задавая дополнительных вопросов.

И последнее примечание: для корректной работы rsync на обоих серверах должна быть установлена идентичная версия сервиса openSSH.
Проверить это можно при помощи команды
# ssh -V

В моем случае в ответ я получаю на обоих серверах
OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013

Комментариев нет :

Отправить комментарий