Шаг 3 — Аутентификация на сервере Debian с помощью ключей SSH
Если вы успешно выполнили одну из вышеописанных процедур, вы сможете войти на удаленный хост без пароля учетной записи для удаленного хоста.
Базовый процесс выглядит аналогично:
Если вы подключаетесь к этому хосту первый раз (если вы используете указанный выше последний метод), вы сможете увидеть следующее:
Это означает, что ваш локальный компьютер не распознает удаленный хост. Введите «yes» и нажмите , чтобы продолжить.
Если вы не указывали пароль для своего закрытого ключа, вы войдете в систему немедленно. Если вы указали пароль закрытого ключа при создании ключа, вам будет предложено ввести его сейчас (для безопасности вводимые символы не будут отображаться в сеансе терминала). После аутентификации в оболочке откроется новый сеанс с настроенной учетной записью на сервере Debian.
Если аутентификация на базе ключа выполнена успешно, вы можете перейти к изучению дополнительных возможностей защиты системы посредством отключения аутентификации с помощью пароля.
Полезные опции
Рассмотрим примеры использования некоторых настроек, которые могут показаться полезными.
Исключения
Мы можем настроить исключение файлов по маске, которые не нужно передавать в другую директорию. Это делается с помощью опций exclude или excludeFrom в разделе sync, например:
sync {
…
exclude = { ‘*.bak’ , ‘*.tmp’ },
}
sync {
…
excludeFrom=»/etc/lsyncd.exclude»,
}
* в первом блоке мы исключим все файлы, которые заканчиваются на .bak или .tmp. Для второго мы будем использовать файл /etc/lsyncd.exclude, в котором перечислим исключения.
Для второго блока создаем файл с исключениями:
vi /etc/lsyncd.exclude
*.tmp
*.bak
testfile.txt
test/
* в данном примере мы игнорируем файлы, заканчиваются на .bak или .tmp,а также файл testfile.txt и содержимое каталога test.
Комментарии
Стоит обратить внимание, что комментарии в конфигурационном файле ставятся с помощью двух дефисов, например:
sync {
— протокол синхронизации
default.rsyncssh,
— источник данных
source = «/tmp/source»,
— сервер назначения
host = «dmosk@192.168.1.15»,
— каталог назначения
targetdir = «/tmp/target»,
}
Порт SSH
Отдельный порт для подключения по ssh мы можем указать в блоке sync, разделе ssh:
sync {
default.rsyncssh,
source = «/tmp/source»,
…
ssh = {
port = 2222
}
}
* в этом примере мы указываем использовать порт 2222 для подключения по SSH.
Ограничения
При необходимости, мы можем установить некоторые значения для ограничения или обхода ограничений. Настройки задаются в блоке settings:
settings {
…
statusInterval = 5
maxDelays = 900,
maxProcesses = 6,
}
* где:
- statusInterval — как говорилось выше, задает интервал обновления статус-файла в секундах. Чем ниже значение, тем быстрее файлы попадают в очередь для синхронизации.
- maxDelays — задает количество файлов в очереди, при достижении которого задачи синхронизации будут запускаться ниже таймера задержки.
- maxProcesses — максимальное количество процессов, которое сможет запустить lsync.
Установка прав
Мы можем задать права после синхронизации. Это настраивается в блоке sync, разделе rsync:
sync {
…
rsync = {
…
owner=true,
chown=»nginx:nginx»
chmod=»775″
perms=true
}
}
* где:
- owner — говорит, сохранять ли владельца файла.
- chown — задает конкретного владельца и группу.
- chmod — задает права на синхронизированные файлы.
- perms — говорит, сохранять ли права.
How to Transfer Files with Rsync over SSH
4 Апреля 2020
|
Терминал
В этом руководстве мы объясним, как копировать файлы rsync через SSH.
Когда дело доходит до передачи файлов между системами в сети, пользователи Linux и Unix имеют в своем распоряжении множество инструментов.
Наиболее популярными протоколами для передачи данных являются SSH и FTP . Хотя FTP очень популярен, всегда предпочитайте использовать SSH, так как это самый безопасный способ передачи ваших файлов.
Есть специализированные инструменты для передачи файлов через SSH , такие как и , но ни один из них не обладают всеми возможностями , которые предоставляют. может использоваться для зеркалирования данных, инкрементного резервного копирования, копирования файлов между системами и так далее.
Требования
-
Утилита должна быть установлена на обоих назначения и исходных систем. Если он не установлен, вы можете установить его, используя менеджер пакетов вашего дистрибутива:
Ubuntu и Debian:
CentOS и Fedora:
-
SSH доступ к удаленному компьютеру.
-
Пользователь, выполняющий команду, и удаленный пользователь SSH должны иметь соответствующие разрешения для чтения и записи файлов.
Использование для передачи файлов по SSH
С помощью вы можете передавать файлы и каталоги по SSH с и на удаленные серверы.
Общий синтаксис для передачи файлов с помощью следующего:
Где находится исходный каталог, целевой каталог — это удаленное имя пользователя SSH, а также удаленный хост SSH или IP-адрес.
Более новые версии rsync настроены на использование SSH в качестве удаленной оболочки по умолчанию, поэтому вы можете опустить эту опцию.
Например, для передачи одного файла из локальной системы в каталог на удаленной системе с IP-адресом вы должны выполнить:
Опция означает архивный режим , который синхронизирует каталоги рекурсивно, передача специального и блочные устройства, сохранить символические ссылки, время модификации, группы, права собственности и права доступа.
Если вы не установили пароль без пароля для удаленного компьютера, вам будет предложено ввести пароль пользователя.
Если файл существует на удаленном сервере, он будет перезаписан. Если вы хотите сохранить файл под другим именем, укажите новое имя:
Для передачи данных с удаленного на локальный компьютер используйте удаленное местоположение в качестве источника и локальное местоположение в качестве места назначения:
Передача каталогов по протоколу SSH аналогична передаче файлов.
Важно знать, что в исходных каталогах по-разному трактуется косая черта. Если исходный каталог имеет косую черту, будет копироваться только содержимое исходного каталога в целевой каталог
Если косая черта не указана, исходный каталог будет скопирован в целевой каталог.
Например, чтобы перенести локальный каталог в каталог на удаленной машине, вы должны набрать:
Используйте эту опцию, если вы хотите синхронизировать локальный и удаленный каталог. Будьте осторожны при использовании этой опции, поскольку она удалит файлы в целевом каталоге, если они не существуют в исходном каталоге.
Если SSH на удаленном хосте прослушивает порт, отличный от порта по умолчанию , укажите порт с помощью параметра. Например, если SSH прослушивает порт, вы должны использовать:
При передаче больших объемов данных рекомендуется запускать команду в сеансе экрана или использовать параметр, который указывает показывать индикатор выполнения во время передачи и сохранять частично переданные файлы:
Вы также можете прочитать , как исключить файлы или каталоги с .
Копирование rsync через ssh
Rsync может работать через ssh. Это избавляет от необходимости настраивать отдельно службу и авторизацию, но при этом будут использоваться системные учетные записи. У меня есть предположение, что производительность при подключении по ssh будет ниже, но я нигде не видел подтверждения этому.
Для того, чтобы скопировать файлы с помощью rsync по ssh нет необходимости запускать службу, настраивать конфиг, создавать файл с авторизацией. Можно просто запустить примерно такую команду на передачу файлов.
# /usr/bin/rsync -avz --progress --delete root@10.1.6.221:/data/mysql_dump /backup
Будьте внимательны при использовании ключа —delete. Не перепутайте источник, откуда качаете файлы, с приемником, куда копируете. Если их перепутать и в качестве источника указать пустую папку, а в качестве приемника с файлами, файлы будут удалены моментально и без предупреждения.
Если для подключения вы используете публичный ключ или нестандартный порт ssh, указать эти параметры можно следующим образом.
# /usr/bin/rsync -avz --progress --delete -e "ssh -p 1234 -i /root/.ssh/id_rsa.pub" root@10.1.6.221:/data/mysql_dump /backup
Использование ключа
Ввод пароля для подключения через SSH — раздражающая процедура. У меня почти никогда не получалось ввести его правильно с первого раза. Поэтому я начал искать информацию о том, как подключиться к серверу через SSH без пароля. Простое и безопасное решение — использование ключа. Почему это безопаснее? Потому что пароль можно подобрать. Чтобы исключить такую вероятность, многие пользователи выбирают авторизацию с помощью ключа.
Суть процедуры в формировании двух ключей: публичного и приватного. Первый копируется на сервер, а второй остается на компьютере пользователя и не передается по сети. В таком случае пароль при подключении не требуется. Когда вы подключаетесь к серверу через SSH, публичный ключ взаимодействует с приватным и открывает доступ к удаленному управлению.
Генерирование ключа и подключение на Windows
Для удобства используем программу PuTTy. Вместе с ней устанавливается утилита PuTTYgen — в ней можно сгенерировать публичный и приватный ключи.
- Запустите программу PuTTYgen.
- Нажмите на кнопку Gengerate.
- Водите курсором мышки по рабочему столу, чтобы сгенерировать случайные значения ключей.
- Нажмите на кнопку Save private key, чтобы сохранить на жестком диске приватный ключ. Место хранения может быть любым — его нужно указать в параметрах PuTTY. Сделаем это позже.
- Скопируйте публичный ключ в буфер обмена (Ctrl + C) и закройте генератор ключей.
Теперь нужно перенести публичный ключ на сервер. Запустите программу PuTTY и подключитесь к серверу с помощью пароля. Затем последовательно введите следующие команды:
mkdir ~/.ssh chmod 0700 ~/.ssh touch ~/.ssh/authorized_keys chmod 0644 ~/.ssh/authorized_keys
Эти команды создают на сервере папку и файл для хранения ключей, а также ограничивают к ним доступ — получить его может только владелец.
Следующий шаг — вставка публичного ключа из буфера обмена в файл authorized_keys. Для этого используется команда cat > .ssh/authorized_keys. После ввода команды щелкните по окну терминала правой кнопкой, чтобы вставить скопированный ранее публичный ключ. Для завершения ввода нажмите на сочетание клавиш Ctrl+D.
Вернитесь в настройки PuTTY. Перейдите в раздел Connection — SSH — Auth. Нажмите на кнопку Browse и укажите путь к приватному ключу, который вы ранее сохранили на жестком диске.
Теперь для подключения к серверу через SSH пароль не нужен — достаточно указать логин и IP-адрес сервера.
Генерирование ключа и подключение на Linux и macOS
Теперь посмотрим, как подключиться через SSH ключи на Linux и macOS.
- Запустите терминал на локальном компьютере.
- Выполните команду ssh-keygen, чтобы сгенерировать ключи.
- Нажмите на Enter, чтобы сохранить ключи.
Генератор предложит также задать кодовую фразу для ключа. Это дополнительная мера безопасности: если кто-то получит доступ к вашей локальной машине, то все равно не сможет подключиться к серверу через SSH. Минус один — вам тоже придется постоянно вводить ключевую фразу. Можно отказаться от этой меры защиты, просто нажав на клавишу Enter.
На этом процедура создания ключей завершена. Файлы d_rsa (приватный ключ) и id_rsa.pub (публичный ключ) хранятся в папке ~/.ssh/. Осталось скопировать открытую часть ключа на сервер.
- Вернитесь в терминал.
- Выполните команду ssh-copy-id root@185.104.114.90, где root — логин для подключения к серверу по SSH, а 185.104.114.90 — IP-адрес или хост сервера.
После выполнения этой команды публичный ключ будет скопирован на сервер. Теперь вы можете подключаться к удаленной машине с помощью логина и IP-адреса — например, ssh root@185.104.114.90. Ключи будут сопоставляться автоматически.
Отключение запроса пароля
Суть приватных ключей в том, что они хранятся на локальных компьютерах. Если вы попытаетесь подключиться к серверу с другой машины, на которой нет ключа, то снова увидите запрос на ввод пароля. Чтобы авторизоваться можно было только по ключу, запретите использование пароля.
- Подключитесь к удаленному серверу.
- Выполните команду sudo nano /etc/ssh/sshd_config. Файл sshd_config откроется во встроенном текстовом редакторе.
- Найдите строку PasswordAuthentication yes и измените ее на PasswordAuthentication no.
- Сохраните изменения и перезапустите службу SSH командой sudo service ssh restart.
Авторизация по паролю отключена. Теперь подключиться к серверу можно только с помощью пары ключей.
Используйте эти примеры rsync, чтобы узнать, как копировать из командной строки
rsync – это программа для передачи файлов для Linux, которая позволяет копировать каталоги и файлы с помощью простой команды. Команда включает в себя дополнительные параметры помимо традиционной функции копирования.
Одна из наиболее полезных функций rsync заключается в том, что когда вы используете его для копирования каталогов из командной строки, вы можете систематически исключать файлы. Таким образом, если вы используете rsync для создания резервных копий файлов, вы можете сделать так, чтобы он создавал резервные копии только тех файлов, которые вы хотите заархивировать, избегая всего остального.
Синтаксис rsync
Правильное использование команды rsync требует правильного синтаксиса:
rsync ... ... rsync ... ... ВЕДУЩАЯ: DEST rsync ... ... HOST :: DEST rsync ... ... rsync: // HOST /DEST rsync ... ХОСТ: SRC rsync ... ХОСТ :: SRC rsync ... rsync: // ХОСТ /SRC
Предоставленное выше пространство option может быть заполнено рядом параметров. Полный список приведен в разделе ОБЗОР ОПЦИЙ документации rsync, но вот несколько распространенных примеров:
-
-v , –verbose : увеличьте детализацию (более подробно рассказывается о том, что делает команда).
- – info = FLAGS . Предоставляет подробные информационные сообщения.
- – debug = FLAGS . Предоставляет подробные сообщения отладки.
- – msgs2stderr : специальная обработка вывода для отладки.
-
-q , –quiet
– no-motd : подавляет сообщение дня в режиме демона (MOTD).
. Подавляет сообщения, не связанные с ошибками.
- -c , –checksum : пропускает файлы на основе контрольной суммы, а не времени и размера мода.
- -r , –recursive . Просмотрите дополнительные подкаталоги.
-
-b , –backup : создавайте резервные копии.
- – backup-dir = DIR . Делайте резервные копии в соответствующей иерархии каталогов.
- – суффикс = SUFFIX . Добавляет текст суффикса в конец файлов резервной копии.
- -d , –dirs : переносить только каталоги, не просматривая их.
Примеры rsync
Ниже приведено несколько примеров использования rsync с некоторыми из этих опций.
В каждом из этих примеров текст, выделенный жирным шрифтом, изменить нельзя, поскольку он является частью команды. Как вы можете заметить, пути к папкам и другие параметры настраиваются в наших конкретных примерах, поэтому они будут отличаться при их использовании.
rsync /home/jon/Desktop/data/*. jpg/home/jon/Desktop/backupdata/
В этом примере выше все файлы JPG из папки /data/ копируются в папку /backupdata/ в папке рабочего стола пользователя Jon.
Копирование файлов по размеру
rsync --max-size = 2k/home/jon/Desktop/data// home/jon/Desktop/backupdata/
Этот пример rsync немного сложнее, поскольку он настроен на не копировать файлы, если их размер превышает 2048 КБ. То есть копировать только файлы меньше указанного размера.
Вы можете использовать k, m, или g , чтобы указать килобайты, мегабайты и гигабайты в множителе 1024, или кб , мб или gb , чтобы использовать 1000.
rsync --min-size = 30 МБ/home/jon/Desktop/data// home/jon/Desktop/backupdata/
То же самое можно сделать для – min-size , как вы видели выше. В этом примере rsync будет копировать только файлы размером 30 МБ или более.
rsync --min-size = 30 МБ --progress /home/jon/Desktop/data// home/jon/Desktop/backupdata/
Когда вы используете rsync для копирования файлов очень большого размера, например, 30 МБ и более, особенно если их несколько, возможно, вы захотите увидеть ход выполнения функции копирования, чтобы знать, что команда обрабатывает. В этих случаях используйте параметр – progress , чтобы процесс работал до 100%.
Копировать целые папки
rsync --recursive /home/jon/Desktop/data/home/jon/Desktop/data2
Параметр – recursive предоставляет простой способ скопировать всю папку в другое место, например в папку /data2/ в приведенном выше примере.
Эта команда скопирует всю папку и все ее содержимое в новое место.
Исключить некоторые файлы
rsync -r --exclude = "* .deb "/home/jon/Desktop/data/home/jon/Desktop/backupdata
Вы также можете скопировать всю папку, но исключить файлы с определенным расширением, например, файлы DEB в этом примере выше.
В этом примере вся папка /data/ копируется в /backupdata/, как и в предыдущем примере, но все файлы DEB исключаются из копии.
Установка rsync на CentOS 8
Чаще всего rsync уже присутствует в базовой версии centos 8, но скорее всего без версии, работающей в качестве службы. Так что устанавливаем обоих:
# dnf install rsync rsync-daemon
Если у вас еще нет настроенной системы, то используйте мои статьи по установке и настройке centos 8. Запускаем rsyncd и добавляем в автозагрузку.
# systemctl enable --now rsyncd Created symlink /etc/systemd/system/multi-user.target.wants/rsyncd.service → /usr/lib/systemd/system/rsyncd.service.
Проверяем автозагрузку:
# systemctl list-unit-files --type service | grep rsyncd rsyncd.service enabled
Проверяем, слушает ли служба сетевой порт.
# netstat -tulpn | grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 40814/rsync tcp6 0 0 :::873 :::* LISTEN 40814/rsync
Все в порядке, можно приступать к настройке rsync. Если вам не нужен ipv6, то можете его отключить.
Авторизация по ключу в SSH
Только после добавления необходимого ключа командой ssh-add возможно подключится по ключу!
Подключимся к нужному серверу по нестандартному порту с выводом истории подключения ssh:
ssh -p 4223442 root@10.10.0.2 -v = вывод части команды с комментариями = OpenSSH_7.5p1-hpn14v12, OpenSSL 1.0.2k 26 Jan 2017 debug1: Reading configuration data /etc/ssh/ssh_config debug1: Connecting to 10.10.0.2 port 4223442. debug1: Connection established. debug1: Server host key: ecdsa-sha2-nistp256 SHA256:i8TBEPr+jQo0HT49dpo1zOgCX9xPUOlvFEDCU63tHQA debug1: Host ':4223442' is known and matches the ECDSA host key. debug1: Found key in /home/user/.ssh/known_hosts:20 debug1: rekey after 134217728 blocks debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS received debug1: rekey after 134217728 blocks debug1: SSH2_MSG_SERVICE_ACCEPT received # В этой строчке мы видим возможные варианты подключения к серверу debug1: Authentications that can continue: publickey debug1: Next authentication method: publickey debug1: Offering RSA public key: /home/user/.ssh/rsa_sevo44 debug1: Server accepts key: pkalg ssh-rsa blen 151 debug1: Authentication succeeded (publickey). Authenticated to10.10.0.2 (:4223442). debug1: HPN to Non-HPN Connection debug1: Final hpn_buffer_size = 2097152 debug1: HPN Disabled: 0, HPN Buffer Size: 2097152 debug1: channel 0: new debug1: Enabled Dynamic Window Scaling debug1: Requesting no-more-sessions@openssh.com debug1: Entering interactive session. debug1: pledge: network The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sun Jul 16 00:28:36 2017 from 10.10.0.3 root@proxmox:~#
Использование пароля
Начнем с инструкции о том, как подключиться к удаленному серверу через SSH по логину и паролю. Это самый простой способ. Хостер предоставляет вам IP-адрес, логин и пароль. Этого достаточно для того, чтобы установить соединение с удаленным сервером.
Подключение на Windows
Моя основная система — Windows. Раньше для подключения к серверу через SSH я пользовался сторонней утилитой PuTTY, потому что в операционной системе не было встроенного компонента. В «десятке» он появился, так что теперь можно подключаться к SSH через командную строку (cmd).
Чтобы включить встроенный в систему OpenSSH:
- Откройте «Параметры» (Win + I) и перейдите в раздел «Приложения».
- Выберите опцию «Управление дополнительными компонентами».
- Нажмите «Добавить компонент».
- Выберите в списке OpenSSH Client и нажмите «Установить».
- После завершения установки перезагрузите систему.
Теперь разберемся, как подключиться к SSH через cmd. Запустите командную строку и выполните запрос вида ssh root@185.104.114.90.
Значение root — логин для подключения, вы получили его в письме при создании сервера. 185.104.114.90 — IP-адрес сервера. Его можно посмотреть в панели управления сервером или в том же письме, которое прислал хостер. У команды может быть также дополнительный параметр -p, после которого прописывается номер порта. По умолчанию используется порт 22. Если у вас настроен другой порт, нужно явно его указать, — например, полный адрес может выглядеть так: ssh root@185.104.114.90 -p 150.
После выполнения команды клиент SSH предложит добавить устройство в список известных. Введите в командной строке yes и нажмите на Enter. Затем укажите пароль для доступа к серверу. На этом подключение к серверу через SSH завершено — теперь все команды будут выполняться на удаленной машине, к которой вы подключились.
На версиях младше Windows 10 1809 нет встроенной поддержки протокола OpenSSH. В таком случае понадобится сторонняя утилита. Смотрим, как через PuTTY подключиться по SSH:
- Запустите PuTTY.
- На вкладке Session укажите Host Name (IP-адрес сервера), Port (по умолчанию 22, но если вы в конфигурации сервера указали другой порт, нужно задать его номер).
- Убедитесь, что тип соединения установлен SSH.
- Нажмите на кнопку Open, чтобы подключиться.
Если вы ввели правильные данные, появится окно консоли, в котором нужно указать логин и пароль для подключения к серверу. При первом запуске также отобразится запрос на добавление устройства в список известных.
Подключение на Linux и macOS
Теперь посмотрим, как подключиться по SSH через терминал на Linux. Для этого не требуется установка дополнительных компонентов, все работает «из коробки».
- Запустите терминал. Обычно для этого используется сочетание клавиш Ctrl+Alt+T. Найти терминал также можно по пути «Главное меню» — «Приложения» — «Система».
- Выполните команду для подключения. Синтаксис такой же, как на Windows, — ssh root@185.104.114.90. Если порт не стандартный, то нужно явно его указать: например, ssh root@185.104.114.90 -p 150. Вместо root вы указываете свое имя пользователя, а вместо 185.104.114.90 — IP-адрес своего сервера.
- Если хост и порт указаны верно, на следующем шаге появится запрос на ввод пароля. При первом подключении также будет предложение добавить новое устройство в список известных. Для этого введите yes и нажмите на клавишу Enter.
На этом подключение завершено. Теперь все команды, которые вы вводите в терминале, будут выполняться на удаленной машине.
Если IP-адрес или порт указаны неверно, то на экране появится сообщение об ошибке — Connection Refused. Это может также говорить о том, что доступ запрещен брандмауэром на удаленном сервере (если вы его не отключили). Чтобы разрешить подключение через SSH:
- на сервере с Ubuntu/Debian выполните команду $ sudo ufw allow 22/tcp;
- на сервере CentOS/Fedora выполните команду $ firewall-cmd —permanent —zone=public —add-port=22/tcp.
Цифра 22 в синтаксисе — номер порта. Если вы используете другой порт, то укажите его явно.
Если вы знаете как подключиться через SSH на Linux, то справитесь с этой задачей и на macOS. В операционной системе Apple тоже есть встроенный терминал. Синтаксис команды для подключения не меняется: ssh root@185.104.114.90, где root — ваш логин, а 185.104.114.90 — IP-адрес сервера, с которым вы устанавливаете соединение.
Конфигурация sshd_config
Под занавес не помешает заглянуть в /etc/ssh/sshd_config и проверить всё ли там готово для авторизации по ключам:
# The default requires explicit activation of protocol 1 Protocol 2 # HostKey for protocol version 1 #HostKey etcsshssh_host_key # HostKeys for protocol version 2 HostKey etcsshssh_host_rsa_key #HostKey etcsshssh_host_dsa_key #HostKey etcsshssh_host_ecdsa_key RSAAuthentication yes PubkeyAuthentication yes # The default is to check both .sshauthorized_keys and .sshauthorized_keys2 # but this is overridden so installations will only check .sshauthorized_keys AuthorizedKeysFile %hsshauthorized_keys
Если собрались отключить логин по паролю, тогда в /etc/ssh/sshd_config отключаем:
PasswordAuthentication no PermitRootLogin no
Запускаем rsync через ssh
Мы будем копировать файлы /data/* с сервера 1.1.1.1 на сервер 2.2.2.2 в папку /backup/.
Формат простой:
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:
ls -al /backup/
Взято здесь.
Авторизуйтесь для добавления комментариев!
Шаг 4 — Отключение аутентификации на сервере с помощью пароля
Если вы смогли войти в свою учетную запись с помощью SSH без пароля, это означает, что вы успешно настроили для своей учетной записи аутентификацию на базе ключей SSH. Однако механизм аутентификации по паролю все еще активен, то есть ваш сервер может подвергнуться атаке посредством простого перебора паролей.
Прежде чем выполнять описанные в настоящем разделе шаги, убедитесь, что вы настроили аутентификацию на базе ключей SSH для учетной записи root на этом сервере, или (предпочтительно) вы настроили аутентификацию на базе ключей SSH для учетной записи сервера без привилегий root и с привилегиями
На этом шаге вход в систему по паролю будет заблокирован, поэтому очень важно сохранить возможность доступа с правами администратора
Подтвердив права администратора для удаленной учетной записи, выполните вход на удаленный сервер с помощью ключей SSH как пользователь с привилегиями root или как пользователь с привилегиями . Затем откройте файл конфигурации демона SSH:
Найдите в файле директиву . Она может быть помечена как комментарий. Удалите символ комментария в начале строки и установите значение «no». После этого вы не сможете выполнять вход в систему через SSH с использованием паролей учетной записи:
/etc/ssh/sshd_config
Сохраните и закройте файл, нажав + , затем нажмите для подтверждения сохранения файла, а затем нажмите для выхода из nano. Для фактического внесения этих изменений нужно перезапустить службу :
В качестве меры предосторожности откройте новое окно терминала и проверьте работу службы SSH, прежде чем закрывать этот сеанс:
После проверки работы службы SSH вы сможете безопасно закрыть все текущие сеансы сервера.
Теперь демон SSH на вашем сервере Debian будет реагировать только на ключи SSH. Аутентификация на базе паролей успешно отключена.
Примеры синхронизации Rsync
Дальше давайте рассмотрим использование rsync, примеры синхронизации.
1. Копирование и синхронизация файлов на локальном компьютере
Rsync позволяет синхронизировать файлы и папки в пределах одной машины. Давайте сначала рассмотрим использование rsync для синхронизации файла на локальном компьютере:
Указав опцию —progress вы можете видеть сколько процентов уже скопировано, а сколько еще осталось:
2. Синхронизация папок на локальной машине
Синхронизация папок rsync выполняется так же просто, как и файлов:
Если вы хотите, чтобы все атрибуты файлов, такие, как дата изменения и создания сохранялись, необходимо использовать опцию -a:
3. Синхронизация с удаленным сервером
Ненамного сложнее синхронизировать файлы с удаленным сервером. Скопируем локальную папку documents, на удаленный сервер:
По умолчанию rsync попытается использовать транспорт ssh. Если вы хотите использовать ранее созданный сервер rsync, нужно указать это явно:
Точно также можно синхронизировать файлы с rsync из удаленного сервера:
Адрес удаленного сервера записывается в таком формате:
имя_пользователя@адрес_машины/папка/на/удаленной_машине
Синхронизация папок rsync будет выполняться на стандартном порту.
4. Синхронизация файлов по SSH
Чтобы задать протокол подключения используется опция -e. При использовании SSH все передаваемые данные шифруются и передаются по защищенному каналу, таким образом, чтобы никто не мог их перехватить. Для использования SSH вам нужно знать пароль пользователя в системе.
Синхронизация файлов rsync с удаленного сервера по ssh будет выглядеть вот так:
Если вы используете другой порт для ssh, то здесь его можно указать:
А теперь передадим данные на тот же сервер:
6. Синхронизация не всех файлов в rsync
Опции include и exclude позволяют указать какие файлы нужно синхронизировать, а какие исключить. Опции работают не только с файлами но и с директориями.
Например, скопируем все файлы, начинающиеся на букву R:
7. Удаление при синхронизации
Во время синхронизации можно удалять файлы, которых нет на машине откуда идет rsync синхронизация, для этого используется опция —delete.
Например:
Если перед выполнением этой команды создать в папке файл которого нет на удаленном сервере, то он будет удален.
8. Максимальный размер файлов
Вы можете указать максимальный размер файлов, которые нужно синхронизировать. Для этого используется опция —max-size. Например, будем синхронизировать только файлы меньше 200 килобайт:
9. Удаление исходных файлов
Есть возможность удалять исходные файлы после завершения синхронизации с удаленным сервером:
Таким образом, файл backup.tar будет удален после завершения копирования в папку /tmp/backups.
10. Режим симуляции rsync
Если вы новичок, и еще не использовали rsync, то возможно захотите посмотреть как отработает команда без применения реальных действий в файловой системе. Для этого есть опция dry-run. Команда только выведет все выполняемые действия в терминал, без выполнения реальных изменений:
11. Ограничить скорость передачи
Вы можете ограничить использование пропускной способности сети с помощью опции —bwlimit:
Как я уже писал выше, rsync синхронизирует только части файла, если вы хотите синхронизировать файл целиком используйте опцию -W:
12. Автоматическая синхронизация папок rsync
Можно расписать автоматическую синхронизацию с помощью cron. Но в случае доступа к серверу по SSH необходимо будет создать ключ и загрузить его на сервер, чтобы аутентификация проходила без запроса пароля.
Создаем ключ:
Загружаем ключ на сервер к с которым собираемся синхронизироваться:
Теперь можем переходить к настройке расписания cron. Будем запускать синхронизацию каждый день:
rsync синхронизация каталогов будет выполняться каждый день в пять утра. Подробнее о настройке расписаний Cron можно почитать в отдельной статье.