Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по Linux (http://forum.oszone.net/forumdisplay.php?f=9)
-   -   [решено] Синхронизация каталогов между двумя удалёнными серверами (http://forum.oszone.net/showthread.php?t=354602)

DJ Mogarych 28-11-2023 16:08 3020677

Синхронизация каталогов между двумя удалёнными серверами
 
Привет!

Подскажите, пожалуйста, как синхронизировать два каталога с файлами, которые находятся на удалённых серверах A и B?
Команды будут запускаться на третьем сервере С.

Код:

|---C---|
|        |
А        B

В интернете много инструкций, где команды запускаются на одном из серверов с файлами через ssh-прокси (здесь это C), но как это делать, запуская команды с самого C?

Cereal Keeler 28-11-2023 16:33 3020680

А чем это обусловлено? Между A и B нет связности?

DJ Mogarych 28-11-2023 17:36 3020690

Есть, но нужно из CI/CD запускать синхронизацию, "C" будет контейнером на worker-е.

Cereal Keeler 28-11-2023 17:44 3020691

Цитата:

Цитата DJ Mogarych
Есть, но нужно из CI/CD запускать синхронизацию »

Тогда почему не что-то типа
Код:

C> ssh user@A "rsync -a /path/to/output/  user@B:/path/to/input"

DJ Mogarych 29-11-2023 11:56 3020717

Там ещё нужно подсунуть ключ.
Код:

migration_files_prod2preprod:
  stage: migration_files
  image: docker:cli
  tags:
    - docker
  before_script:
    - eval $(ssh-agent -s)
    - cat $SSH_PRIVATE_KEY | tr -d '\r' | ssh-add -
    - apk add rsync
  script:
    - SSH_PRIVATE_KEY_ENV=$(cat $SSH_PRIVATE_KEY)
    - ssh -o StrictHostKeyChecking=no cicd@10.1.0.142 "
      echo "$SSH_PRIVATE_KEY_ENV" > ./SSH_PRIVATE_KEY ;
      chmod 600 ./SSH_PRIVATE_KEY ;
      rsync -Pav -e 'ssh -i ./SSH_PRIVATE_KEY -o StrictHostKeyChecking=no' --dry-run /docker/lk/prod/backend-data/app cicd@10.1.0.138:/docker/lk/preprod/backend-data/app ;
      "

$SSH_PRIVATE_KEY - это файловая переменная. У меня пока не получается прокинуть ключ в rsync, ошибка

Код:

$ ssh -o StrictHostKeyChecking=no cicd@10.1.0.142 " echo "$SSH_PRIVATE_KEY_ENV" > ./SSH_PRIVATE_KEY ; chmod 600 ./SSH_PRIVATE_KEY ; rsync -Pav -e 'ssh -i ./SSH_PRIVATE_KEY -o StrictHostKeyChecking=no' --dry-run /docker/lk/prod/backend-data/app cicd@10.1.0.138:/docker/lk/preprod/backend-data/app ; "
Warning: Permanently added '10.1.0.142' (ED25519) to the list of known hosts.
Load key "./SSH_PRIVATE_KEY": error in libcrypto
Permission denied, please try again.
Permission denied, please try again.
cicd@10.1.0.138: Permission denied (publickey,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(231) [sender=3.2.7]
Cleaning up project directory and file based variables 00:02
ERROR: Job failed: exit code 12

Много что пробовал - и добавлять пустую строку в конец файла,
Код:

echo "" > ./SSH_PRIVATE_KEY
и создавать переменную с удалением переносов -
Код:

  script:
    - SSH_PRIVATE_KEY_ENV=$(cat $SSH_PRIVATE_KEY | tr -d '\r')

без толку.

DJ Mogarych 29-11-2023 13:43 3020721

Пробовал в отдельно стоящем контейнере, ошибку libcrypto вроде победил (tr -d '\r' всё же нужен), но ругается на отсутствие файла, видимо, на 10.1.0.142 нет файла ключа и всё обламывается:
Код:

ssh -i SSH_PRIVATE_KEY -o StrictHostKeyChecking=no cicd@10.1.0.142 "rsync -Pav -e 'ssh -i SSH_PRIVATE_KEY -o StrictHostKeyChecking=no' --dry-run /docker/lk/prod/backend-data/app cicd@10.1.0.138:/docker/lk/preprod/backend-data/app"

Warning: Identity file SSH_PRIVATE_KEY not accessible: No such file or directory.
Permission denied, please try again.
Permission denied, please try again.
cicd@10.1.0.138: Permission denied (publickey,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(231) [sender=3.2.7]

Теперь вопрос - как сделать, чтобы файл ключа оказался под рукой у rsync. :search:

DJ Mogarych 29-11-2023 14:01 3020722

Придумал. Гланды автогеном, как и многое в CI/CD, но работает.

Код:

scp -i SSH_PRIVATE_KEY -o StrictHostKeyChecking=no SSH_PRIVATE_KEY cicd@10.1.0.142:~
ssh -i SSH_PRIVATE_KEY -o StrictHostKeyChecking=no cicd@10.1.0.142 "chmod 600 SSH_PRIVATE_KEY"
ssh -i SSH_PRIVATE_KEY -o StrictHostKeyChecking=no cicd@10.1.0.142 "rsync -Pav -e 'ssh -i SSH_PRIVATE_KEY -o StrictHostKeyChecking=no' --dry-run /docker/lk/prod/backend-data/app cicd@10.1.0.138:/docker/lk/preprod/backend-data/app"
ssh -i SSH_PRIVATE_KEY -o StrictHostKeyChecking=no cicd@10.1.0.142 "rm SSH_PRIVATE_KEY"


Cereal Keeler 03-12-2023 17:00 3020936

Ключики-то можно и навсегда положить, хотя дело ваше.


Время: 18:38.

Время: 18:38.
© OSzone.net 2001-