Rsync - это мощный инструмент, используемый для копирования файлов и папок из одного места в другое в Linux. Он также полезен для синхронизации нескольких каталогов, чтобы они содержали одинаковое содержимое. Вы также можете использовать rsync для копирования файлов и каталогов на и с удаленных серверов. В таких случаях необходимо предоставить данные аутентификации пользователя, такие как имя пользователя и пароль удаленного сервера. Если ваш удаленный сервер использует аутентификацию на основе ключей, а не паролей, то в командах rsync необходимо указать открытый SSH-ключ. В этой статье мы узнаем, как использовать rsync с ключом SSH.
Как использовать Rsync с ключом SSH
Ниже описаны шаги по использованию rsync с ключами SSH. По сути, вам нужно сгенерировать открытый ключ на локальной клиентской системе, поместить его копию на удаленный сервер, куда вам нужно скопировать файлы, и затем вы сможете легко передавать файлы между двумя системами.
1. Настройка открытых ключей SSH
Сначала откройте терминал на локальной клиентской системе и выполните следующую команду для создания на ней беспарольного открытого SSH-ключа.
1 | ssh-keygen -f ~/.ssh/id_rsa -q -P "" cat ~/.ssh/id_rsa.pub |
Мы используем беспарольные ключи, чтобы не запрашивать пароль каждый раз, когда мы используем ключ в команде rsync.
Откройте файл ключа.
1 | cat ~/.ssh/id_rsa.pub |
Скопируйте содержимое этого файла в буфер обмена и войдите на ваш удаленный сервер. Поместите этот SSH-ключ в файл ~/.ssh/authorized_keys. Если вы обнаружите, что эта папка не существует на вашем целевом сервере, создайте ее вручную с помощью следующих команд.
1 | mkdir ~/.ssh chmod 0700 ~/.ssh touch ~/.ssh/authorized_keys chmod 0644 ~/.ssh/authorized_keys |
Теперь при запуске команды rsync с клиентской системы удаленный сервер будет аутентифицировать ее, используя открытый ключ, который вы только что сохранили в папке ~/.ssh/authorized_keys. Передача файлов начнется только при успешной передаче.
2. Синхронизация файлов с помощью Rsync
Теперь вы можете легко использовать команду rsync для копирования файлов из одного места в другое между двумя системами. Для нашего примера мы скопируем файл /home/гыук/data.txt из исходной системы с IP 12.34.56.78 в конечную с IP 87.65.43.21 и сохраним его в той же папке. Для этого войдите в систему 87.65.43.21 и выполните rsync файлов на удаленный сервер с помощью следующей команды. Замените в ней имя пользователя на имя вашего удаленного пользователя.
1 | rsync -avz -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress /home/ubuntu/data.txt username@87.65.43.21:/home/user |
Вы можете убедиться, что файл был передан, войдя в систему 87.65.43.21 и просмотрев его содержимое с помощью команды ls.
1 | ls -la /home/user/data.txt |
Заключение
В этой небольшой статье мы узнали, как использовать rsync с ключами SSH. Многие облачные системы, такие как AWS, используют аутентификацию на основе ключей, поэтому данный метод может быть использован в таких случаях. Кроме того, поскольку мы используем открытые ключи без пароля, вы можете добавить приведенные выше команды в сценарий оболочки или cronjob для автоматизации задач.
Фактически, скопировав открытый ключ локальной системы на удаленную систему, вы можете использовать его для копирования файлов как на удаленную систему, так и с нее. Это работает в обоих направлениях. Но вы не можете вызвать rsync с удаленной системы на локальную. Для этого вам необходимо разместить открытый ключ удаленного сервера на локальной системе для аутентификации.