Rsync linux ssh key

eCommerce и не только

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

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

В общем виде команда для репликации файлов будет выглядеть так:

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

В стандартном случае, после запуска этой команды система попросит авторизоваться:

И до тех пор, пока пароль не будет указан команда не будет выполнена.

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

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

Enter passphrase (empty for no passphrase): Enter same passphrase again:

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

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

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

При этом система попросит ввести пароль пользователя [email protected]

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

Читайте также:  Как узнать версию системы линукс

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

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

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

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

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

OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013

Источник

Rsync через ssh

1) 1.1.1.1 — основной сервер (файлы, почта, что угодно иное), пользователь user1.
2) 2.2.2.2 — сервер, на котором хранятся резервные копии, пользователь user2.

Считаем, что раньше вы не настраивали доступ по ssh к серверам по ключам, а используете пароли. Заодно от паролей избавимся.

Идея: находясь на сервере 2.2.2.2, мы запускаем процесс копирования данных с основного сервера 1.1.1.1 (к себе, на 2.2.2.2).

Проверяем коннект ssh с паролем

Если мы с сервера 2.2.2.2 не сможем с паролем соединиться по ssh к 1.1.1.1, то дальше можно и не продолжать.

Готовим почву

На серверах установим rsync:

Редактируем конфиг xinetd для rsync:

Создадим отдельного пользователя rsync без домашней директории и /sbin/nologin. Да, я люблю вместо общего nobody для важных задач создавать отдельных пользователей. Никогда не знаешь наперед, когда придется анализировать, что и где глючит.

Редактируем (создаем) минимальный конфиг rsync на сервере 1.1.1.1:

nano /etc/rsyncd.conf uid = rsync gid = rsync use chroot = true max connections = 5 pid file = /var/run/rsyncd.pid motd file = /etc/rsync.motd # Logging log file = /var/log/rsyncd.log transfer logging = true log format = %t %a %m %f %b syslog facility = local3 timeout = 300

netstat -lnpt | grep 873
tcp 0 0 . 873 . * LISTEN 16269/xinetd

Ок, xinetd слушает порт rsync и при запросе запустит его.

На сервере 2.2.2.2 (с которого будем коннектится) сгенерируем сертификат для доступа без пароля:

# ssh-keygen -f ~/.ssh/id_rsa -q -P «» -b 4096

  • -q — silense
  • -f — имя файла ключа
  • -P «» — пустой пароль
  • -b 4096 — размер ключа, бит

Просмотрим публичный ключ, который надо будет скопировать на 1.1.1.1, куда будем впоследствии подсоединяться:

# cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLVDBIpdpfePg/a6h8au1HTKPPrg8wuTrjdh0QFVPpTI4KHctf6/ FGg1NOgM++hrDlbrDVStKn/b3Mu65//tuvY5SG9sR4vrINCSQF++a+YRTGU6Sn4ltKpyj3usHERvBndtFXoDxsYKR CtPfgm1BGTBpoSl2A7lrwnmVSg+u11FOa1xSZ393aaBFDSeX8GlJf1SojWYIAbE25Xe3z5L232vZ5acC2PJkvKctz vUttJCP91gbNe5FSwDolE44diYbNYqEtvq2Jt8x45YzgFSVKf6ffnPwnUDwhtvc2f317TKx9l2Eq4aWqXTOMiPFA5 ZRM/CF0IJCqeXG6s+qVfRjB root@cloudads

На сервере 1.1.1.1 (откуда будем копировать файлы).

Скопируем этот ключ на сервер 1.1.1.1, на который будем логиниться, в директорию пользователя user1, под которым будем логинитсья, в файл ~/.ssh/authorized_keys file.

Если директории .ssh на 1.1.1.1 не существует, создадим ее:

mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys

В файл ~/.ssh/authorized_keys копируем содержимое публичного ключа, созданного на сервере 2.2.2.2 (файл id_rsa.pub) и перезапускаем sshd:

Все, мы готовы проверить соединение с 2.2.2.2 на 1.1.1.1 по ssh:

ssh -i /home/user2/.ssh/id_rsa -p 22 user1@1.1.1.1

Если соединение прошло, можно двигаться дальше. Если нет — надо обязательно понять, где проблема (firewall, ошибка copy/paste ключа, забыли restart sshd, что-то еще).

Читайте также:  Kali linux заглушить wifi

Запускаем rsync через ssh

Мы будем копировать файлы /data/* с сервера 1.1.1.1 на сервер 2.2.2.2 в папку /backup/.

Формат простой: rsync [опции] [откуда] [куда]

rsync -avz -e «ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null» —progress 1.1.1.1:/data/data.zip /backup/

rsync -avz -e «ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null» —progress user1@1.1.1.1:/data/* /backup/

rsync -avz -e «ssh -p 22» —progress user1@1.1.1.1:/data/* /backup/

-e «ssh . « — указываем, что хотим все передавать по ssh;
-p 22 — указываем порт, на котором работает ssh на сервере 1.1.1.1;
-a, —archive – архивный режим, включает рекурсивное копирование и сохранение прав и владельца;
-v — расширенный вывод;
-z — использовать компрессию данных;
user1 — локальный пользователь сервера 1.1.1.1, настроенный на логин по ssh по ключу.

Естественно, пользователь user1 должен иметь права доступа в /data/.

Вот и все. После копирования проверим, создался ли файл на сервере 2.2.2.2:

Авторизуйтесь для добавления комментариев!

Источник

Как использовать Rsync с ключом SSH

Rsync — это мощный инструмент, используемый для копирования файлов и папок из одного места в другое в Linux. Он также полезен для синхронизации нескольких каталогов, чтобы они содержали одинаковое содержимое. Вы также можете использовать rsync для копирования файлов и каталогов на и с удаленных серверов. В таких случаях необходимо предоставить данные аутентификации пользователя, такие как имя пользователя и пароль удаленного сервера. Если ваш удаленный сервер использует аутентификацию на основе ключей, а не паролей, то в командах rsync необходимо указать открытый SSH-ключ. В этой статье мы узнаем, как использовать rsync с ключом SSH.

linux

Как использовать Rsync с ключом SSH

Ниже описаны шаги по использованию rsync с ключами SSH. По сути, вам нужно сгенерировать открытый ключ на локальной клиентской системе, поместить его копию на удаленный сервер, куда вам нужно скопировать файлы, и затем вы сможете легко передавать файлы между двумя системами.

1. Настройка открытых ключей SSH

Сначала откройте терминал на локальной клиентской системе и выполните следующую команду для создания на ней беспарольного открытого SSH-ключа.

ssh-keygen -f ~/.ssh/id_rsa -q -P "" cat ~/.ssh/id_rsa.pub

Мы используем беспарольные ключи, чтобы не запрашивать пароль каждый раз, когда мы используем ключ в команде rsync.

Скопируйте содержимое этого файла в буфер обмена и войдите на ваш удаленный сервер. Поместите этот SSH-ключ в файл ~/.ssh/authorized_keys. Если вы обнаружите, что эта папка не существует на вашем целевом сервере, создайте ее вручную с помощью следующих команд.

mkdir ~/.ssh chmod 0700 ~/.ssh touch ~/.ssh/authorized_keys chmod 0644 ~/.ssh/authorized_keys

Теперь при запуске команды rsync с клиентской системы удаленный сервер будет аутентифицировать ее, используя открытый ключ, который вы только что сохранили в папке ~/.ssh/authorized_keys. Передача файлов начнется только при успешной передаче.

Читайте также:  Kali linux все возможности

2. Синхронизация файлов с помощью Rsync

Теперь вы можете легко использовать команду rsync для копирования файлов из одного места в другое между двумя системами. Для нашего примера мы скопируем файл /home/гыук/data.txt из исходной системы с IP 12.34.56.78 в конечную с IP 87.65.43.21 и сохраним его в той же папке. Для этого войдите в систему 87.65.43.21 и выполните rsync файлов на удаленный сервер с помощью следующей команды. Замените в ней имя пользователя на имя вашего удаленного пользователя.

Вы можете убедиться, что файл был передан, войдя в систему 87.65.43.21 и просмотрев его содержимое с помощью команды ls.

Заключение

В этой небольшой статье мы узнали, как использовать rsync с ключами SSH. Многие облачные системы, такие как AWS, используют аутентификацию на основе ключей, поэтому данный метод может быть использован в таких случаях. Кроме того, поскольку мы используем открытые ключи без пароля, вы можете добавить приведенные выше команды в сценарий оболочки или cronjob для автоматизации задач.

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

Похожие записи:

Источник

Как копировать файлы при помощи Rsync через SSH

Для начала нужно сгенерировать открытые ключи SSH без пароля на первоначальном сервере:

ssh-keygen -f ~/.ssh/id_rsa -q -P «»
cat ~/.ssh/id_rsa.pub

Это открытый SSH-ключ, который можно разместить на других хостах, чтоб получить доступ:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLVDBIpdpfePg/a6h8au1HTKPPrg8wuTrjdh0QFVPpTI4KHctf6/FGg1NOgM++hrDlbrDVStKn/b3Mu65//tuvY5SG9sR4vrINCSQF++a+YRTGU6Sn4ltKpyj3usHERvBndtFXoDxsYKRCtPfgm1BGTBpoSl2A7lrwnmVSg+u11FOa1xSZ393aaBFDSeX8GlJf1SojWYIAbE25Xe3z5L232vZ5acC2PJkvKctzvUttJCP91gbNe5FSwDolE44diYbNYqEtvq2Jt8x45YzgFSVKf6ffnPwnUDwhtvc2f317TKx9l2Eq4aWqXTOMiPFA5ZRM/CF0IJCqeXG6s+qVfRjB root@cloudads

Скопируйте данный ключ в буфер обмена и подключитесь к серверу назначения.

Поместите этот ключ в файл ~/.ssh/authorized_keys:

Если папки SSH не существует, создайте ее вручную:

mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys

2. Файлы Rsync

Rsync – очень полезная утилита, так как она, помимо всего прочего, позволяет пользователю рекурсивно копировать файлы по зашифрованному каналу с применением сжатия.

Скопируем файл, находящийся в /root/bigfile.txt на первоначальном сервере (198.211.117.101), на сервер назначения (IP: 198.211.117.129) и также сохраним его в /root/bigfile.txt.

Войдите на исходный сервер и, применив утилиту rsync на указанный файл, скопируйте его на сервер назначения:

rsync -avz -e «ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null» —progress /root/bigfile.txt 198.211.117.129:/root/

Если вы работаете с другого пользователя, например, с «username», нужно добавить его перед сервером назначения. Убедитесь, что открытый ключ помещен в файле ~/.ssh/authorized_keys данного пользователя:

rsync -avz -e «ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null» —progress /root/bigfile.txt username@198.211.117.129:/

Параметры SSH помогут сдерживать Rsync, а также избежать Rsync-указаний при каждом подключении к новому серверу.

Убедитесь, что файл был скопирован на целевой сервер (198.211.117.129):

Источник

Оцените статью
Adblock
detector