microcell (microcell) wrote,
microcell
microcell

Category:

Синхронизация данных при помощи SSH и rsync

Типичная ситуация, у вас существует папка на неком сервере, и вы хотите забэкапить её на другом сервере. Или просто перенести её на другой сервер. Можно, конечно, съархивировать её при помощи tar -cjf, после чего закачать содержимое другого архива на сервер по sftp и там распаковать через консоль. Но это долго, муторно и, в случае, если это необходимо повторять периодически, весьма геморно.

К счастью, в линуксе существует для этого стандартное решение, которое, после небольшого ритуального танца, можно будет повесить на cron. Решение называется rsync.



Если у вас нет этой программы, вы можете невозбранно скачать её из репозитория (yum install rsync или apt-get install rsync, для более экзотических случаев существует google). Здесь же речь пойдёт о том, как приспособить эту команду для наших нужд.

В первую очередь, нам необходимо настроить безопасное соединение, которое вы сможете использовать для rsync. Стандартный SSH требует ввода пароля и не годится для cron (хотя некоторые особо "умные" админы используют каналы и перенастройку потоков ввода, что есть зло и глупость, поскольку не позволит вам в будущем изменять пароли). Вместо этого стоит ввести исключение для сервера, который будет осуществлять синхронизацию и позволить ему подключаться, используя публичный ключ RSA.

Эта операция, потенциально, является весьма рискованной, по-скольку не требует использования пароля вообще. Именно так, всякий сервер, который, всего лишь, обладает необходимым ключом, будет способен подключится к вашему серверу, используя этот ключ ВМЕСТО пароля. По этому, в первую очередь, вам стоит позаботиться о сохранности RSA ключей. Однако, следуя определённым правилам, такое соединение окажется даже более безопасным, чем стандартная пара юзер/пароль. В конце концов, пароль всегда можно подобрать или угадать, а вот RSA ключ подобрать окажется значительно сложнее.

Итак, в первую очередь, убедитесь, что сервер, к которому вы хотите подключаться (МАСТЕР) позволяет RSA-соединения. Откройте (из под рута) файл /etc/ssh/sshd_config и убедитесь, что в нём присутствуют следующие строчки:

RSAAuthentication yes
PubkeyAuthentication yes

На сервере, который должен осуществлять подключение (ЗЕРКАЛО) создайте новую пару rsa ключей:

ssh-keygen -t rsa

Делать это надо из под юзера, который будет осуществлять подключение. Лучше всего, если это будет новый юзер, для которого будет, в последствии, отключена возможность входа в систему (по скольку мы всё равно будет пользоваться кроном). Для ввода команды от имени такого юзера, воспользуйтесь sudo -u, man sudo для того, что бы узнать больше об этой программе).

Когда программа попросит вас ввести пароль для нового ключа, не вводите НИЧЕГО. Именно так, иначе вам придётся вводить этот пароль каждый раз, когда вам потребуется воспользоваться rsa ключом и автоматизация по-прежнему будет не возможна. Вместе с тем, вы только что создали громадную дыру в вашей системе безопасности, по этому вы должны позаботиться о том, что бы приватный ключ ни при каких обстоятельствах не мог бы попасть в чужие руки. Убедитесь, что директория .ssh в домашней директории этого пользователя имеет права 700 и файлы с ключами обладают правами 600, иными словами, только сам пользователь и root способны видеть содержимое этого файла (если же вам хакнули рута, то говорить о какой-либо системе безопасности, согласитесь, будет уже поздновато). Так же, отключите этому юзеру возможность использовать sudo просто на всякий случай (оно ему всё равно не потребуется).

Программа ssh-keygen создала в вашей директории .ssh два новых файла (или модифицировала существующие): /home/<user>/.ssh/id_rsa хранит ваш новый rsa ключ и /home/<user>/.ssh/id_rsa.pub хранит публичную часть этого ключа. Всё, что вам осталось сделать, это скопировать содержимое файла id_rsa.pub на МАСТЕР сервер в файл ~/.ssh/authorized_keys того пользователя, под именем которого вы хотите осуществлять подключение. Надо ли говорить, что права на директорию .ssh должны быть 700, а права на этот файл - 600?

Проверьте соединение при помощи sftp, если вы всё сделали правильно, система не должна будет запрашивать у вас пароль.

Последнее, что отсталость сделать, это настроить rsync:

rsync -az <user1>@<ip address of MASTER server>:<path to remote directory>/* <path to local directory>

пример

rsync -az wasia@11.22.33.44:/home/wasia/web /home/ssh_user/web

проверьте эту команду, и, если она работает, как надо, просто добавьте её в крон.

Tags: пособие по приручению пингвина
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments