В этой инструкции мы научимся с помощью #rsync синхронизировать файлы в папках между серверами на #ubuntu и #centos в #яндекс облаке без использование пароля.
Предварительная подготовка
В предыдущей статье мы уже создавали виртуальную машины с Ubuntu в яндекс облаке. Нам нужно сделать тоже самое, только вместо Ubuntu мы выберем CentOS.
Для простоты копирования ssh ключей мы создадим пароль для нашего пользователя на сервере куда мы хотим копировать и пусть это будет CentOS.
Если под Ubuntu достаточно вести команду passwd, то под CentOS вас спросят текущей пароль, а у нас его нет. Поэтому вам нужно менять пароль из-под пользователя root.
Так же ваш пароль желательно должен состоять из цифр, строчных и заглавных букв. Можете добавить знаки подчёркивания и тире. Длина больше 8 символов. И избегайте таких символов как: I, o, O, 0, 1, l. Даже сейчас вы не можете отличить I от l, хотя первая I - это заглавная "i", а вторая "l" - это строчная "L". Тоже самое с буквой "о" и цифрой "0".
[nikolai@centos ~]$ sudo su -
[root@centos ~]# passwd nikolai
Changing password for user nikolai.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
Если вы планируете синхронизовать из CentOS в Ubuntu, то вам нужно так же добавить пароль для пользователя Ubuntu. При чём в Ubuntu вы можете это сделать и для пользователя root, а вот в CentOS по умолчанию под root через ssh нельзя подключаться.
В яндекс облаке по умолчанию отключена авторизация по паролю, поэтому мы её разрешим и перегрузим ssh сервер.
[root@centos ~]# sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
[root@centos ~]# sudo systemctl restart sshd
Генерация ключа
Не смотря, что мы уже сделали ключ для подключения к Ubuntu и CentOS, но этот ключ хранится у нас локально. Конечно мы можем скопировать его на Ubuntu для подключения к CentOS, но мы лучше создадим отдельный ключ.
Так же нет никакой необходимости, что бы пользователи на обоих серверах были одинаковыми. Поэтому мы будет работать в Ubuntu под root, а в CentOS под nikolai.
nikolai@ubuntu:~$ sudo su -
root@ubuntu:~# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:jQC2KGEZXn7SKCZigALt19siK7XGjHjsV1AQvdW+S/0 root@ubuntu
The key's randomart image is:
+---[RSA 3072]----+
|*+o.=+ . |
+----[SHA256]-----+
root@ubuntu:~#
Важно /home/nikolai/.ssh/id_rsa - это название ключа по умолчанию. Лучше не менять его и тем более в ответ не писать yes. Просто нажмите Enter. Иначе при его использовании нужно будет прописывать пусть до него.
passphrase - это парольная защита вашего ключа. Если не хотите её ставить, то просто нажмите 2 раза Enter. И тогда получается после ввода команды ssh-keygen, нужно 3 раза нажать Enter.
Для подключение будет использовать Публичный IPv4, но если у вас обе виртуальной машины в одной сети, то можно и Внутренний IPv4.
Хорошо, на Ubuntu у нас есть ключ, но CentOS об этом ничего не знает. Поэтому скопируем с помощь команды ssh-copy-id публичную часть ключа на CentOS, используя пароль, который мы создали ранее. ssh-copy-id не только добавить публичный ключ на CentOS, но и создаст нужную папку ~/.ssh с правами 700 и ~/.ssh/authorized_keys с правами 600. Если вы будете создавать это сами, то не забудьте поставить нужные права, а ключ в ~/.ssh/authorized_keys записывается в одну строку.
root@ubuntu:~# ssh-copy-id nikolai@84.252.141.239
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '84.252.141.239 (84.252.141.239)' can't be established.
ECDSA key fingerprint is SHA256:zD1UnTAv09vevOVp0HmTeDWW/HHTO7hOBvX+Ahi9haw.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
nikolai@84.252.141.239's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'nikolai@84.252.141.239'"
and check to make sure that only the key(s) you wanted were added.
root@ubuntu:~#
При первом подключении мы получаем предупреждение, что используется неизвестный ECDSA key fingerprint. Это нормально и просто отвечаем yes.
Можем пробовать подключаться.
root@ubuntu:~# ssh nikolai@84.252.141.239
[nikolai@centos ~]$
Мы попали на CentOS и у нас не запросили пароль.
Синхронизация файлов
Давайте сделаем копию наших конфигурационных файлов ssh из Ubuntu папки /etc/ssh в домашнюю папку CentOS пользователя nikolai /home/nikolai/backup_ubuntu.
root@ubuntu:~# rsync -avz /etc/ssh nikolai@84.252.141.239:/home/nikolai/backup_ubuntu/
sending incremental file list
created directory /home/nikolai/backup_ubuntu
ssh/
ssh/moduli
ssh/ssh_config
ssh/ssh_host_dsa_key
ssh/ssh_host_dsa_key.pub
ssh/ssh_host_ecdsa_key
ssh/ssh_host_ecdsa_key.pub
ssh/ssh_host_ed25519_key
ssh/ssh_host_ed25519_key.pub
ssh/ssh_host_rsa_key
ssh/ssh_host_rsa_key.pub
ssh/ssh_import_id
ssh/sshd_config
ssh/ssh_config.d/
ssh/sshd_config.d/
sent 25,688 bytes received 310 bytes 17,332.00 bytes/sec
total size is 546,702 speedup is 21.03
root@ubuntu:~#
Мы использовали следующие аргументы.
-a, --archive
Передача файлов происходит в "архивном" режиме, который гарантирует сохранение символьных ссылок, файлов-устройств, атрибутов, разрешений и т.д.
-v, --verbose
Увеличить уровень выводимых сообщений.
-z, --compress
Сжатие для уменьшения объема непосредственно передаваемых данных.
Проверяем на CentOS.
[nikolai@centos ~]$ find ~/backup_ubuntu/
/home/nikolai/backup_ubuntu/
/home/nikolai/backup_ubuntu/ssh
/home/nikolai/backup_ubuntu/ssh/ssh_config.d
/home/nikolai/backup_ubuntu/ssh/sshd_config.d
/home/nikolai/backup_ubuntu/ssh/moduli
/home/nikolai/backup_ubuntu/ssh/ssh_config
/home/nikolai/backup_ubuntu/ssh/ssh_host_dsa_key
/home/nikolai/backup_ubuntu/ssh/ssh_host_dsa_key.pub
/home/nikolai/backup_ubuntu/ssh/ssh_host_ecdsa_key
/home/nikolai/backup_ubuntu/ssh/ssh_host_ecdsa_key.pub
/home/nikolai/backup_ubuntu/ssh/ssh_host_ed25519_key
/home/nikolai/backup_ubuntu/ssh/ssh_host_ed25519_key.pub
/home/nikolai/backup_ubuntu/ssh/ssh_host_rsa_key
/home/nikolai/backup_ubuntu/ssh/ssh_host_rsa_key.pub
/home/nikolai/backup_ubuntu/ssh/ssh_import_id
/home/nikolai/backup_ubuntu/ssh/sshd_config
[nikolai@centos ~]$
Добавим один файл, а другой изменим на Ubuntu
root@ubuntu:~# date > /etc/ssh/test_file
root@ubuntu:~# sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
Повторим синхронизацию.
root@ubuntu:~# rsync -avz /etc/ssh nikolai@84.252.141.239:/home/nikolai/backup_ubuntu/
sending incremental file list
ssh/
ssh/sshd_config
ssh/test_file
sent 845 bytes received 90 bytes 1,870.00 bytes/sec
total size is 546,735 speedup is 584.74
Обратите внимание, копирование произошло только нового файла и изменённого.
Теперь удалим один файл на Ubuntu.
root@ubuntu:~# rm /etc/ssh/test_file
Повторим синхронизацию.
root@ubuntu:~# rsync -avz /etc/ssh nikolai@84.252.141.239:/home/nikolai/backup_ubuntu/
sending incremental file list
ssh/
sent 462 bytes received 22 bytes 968.00 bytes/sec
total size is 546,703 speedup is 1,129.55
Удаление на CentOS не произошло.
[nikolai@centos ~]$ ll backup_ubuntu/ssh/test_file
-rw-r--r--. 1 nikolai nikolai 32 May 16 15:36 backup_ubuntu/ssh/test_file
Для удаление нужно добавить ещё один аргумент rsync --delete
root@ubuntu:~# rsync -avz --delete /etc/ssh nikolai@84.252.141.239:/home/nikolai/backup_ubuntu/
sending incremental file list
deleting ssh/test_file
sent 459 bytes received 32 bytes 982.00 bytes/sec
total size is 546,703 speedup is 1,113.45
Теперь у нас полный успех.
[nikolai@centos ~]$ ll backup_ubuntu/ssh/test_file
ls: cannot access backup_ubuntu/ssh/test_file: No such file or directory
И на последок. Если вы вдруг получаете ошибку, что нет такой команды rsync, то вы должны его установить на обоих серверах.
root@ubuntu:~# rsync -avz --delete /etc/ssh nikolai@84.252.141.239:/home/nikolai/backup_ubuntu/
bash: rsync: command not found
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(235) [sender=3.1.3]
Ubuntu
sudo apt install -y rsync
CentOS
sudo yum install -y rsync
Удачи в использовании rsync!