Показать статистику
0 голосов
от (2.7тыс. баллов)

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

Я хотел бы ежедневно передавать некоторые файлы с сервера A на сервер B (в целях резервного копирования). Однако я не могу найти способ, который не создает нарушений безопасности. Моя цель состоит в том, чтобы кто-то с правами sudo на сервере A не мог использовать эту передачу для подключения к серверу B.

Моя основная идея заключалась в том, чтобы выполнить cronjob с scp (или аналогичной) командой. Очевидно, что использование ssh-соединения на основе пароля между A и B не работает, а использование ssh-соединения на основе ключа, насколько я знаю, позволит пользователю сервера A напрямую подключаться к B через A.

Я не эксперт по безопасности, я могу упустить очевидное. Есть ли способ добиться того, чего я хочу?

 Я не хочу, чтобы пользователи сервера B могли подключаться к серверу A.

Буду благодарен за помощь в решении.

177 просмотров 1 ответов

1 Ответ

0 голосов
от (26.4тыс. баллов)

Вы не можете ничего скрыть в системе от того, у кого есть root-доступ. Даже если вы используете зашифрованный домашний каталог, когда вы вошли в систему, он расшифровывается, и пользователь root может получить доступ к данным.

Подход 1

Одним из безопасных способов является получение файла с сервера B (если вы доверяете пользователям там), который должен иметь возможность входа через SSH на сервер A. Я использую следующий сценарий rsync для выполнения таких задач:

#!/bin/bash

# Name: $HOME/bin/backup-get-serverA.sh

BACKUP_DIR="/mnt/backups/serverA-backups"
mkdir -p "$BACKUP_DIR"
TODAY="$(date +%Y-%m-%d)"
LOG="$BACKUP_DIR/lat-transfer.log"

main() {
    [[ ! -d $BACKUP_DIR ]] && mkdir "$BACKUP_DIR"
    echo -e "\n***** ${TODAY} *****\n"
    find "$BACKUP_DIR" -mtime +20 -type f -delete # delete all files older than 20 days
    rsync --progress -av -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" serverA:"/var/backups_portable/serverA-backup-${TODAY}.tgz" "$BACKUP_DIR"
}
main > "$LOG" 2>&1
  •  
от (26.4тыс. баллов)
0
  • Хост serverA настроен ~/.ssh/config на сервере B.

Скрипт запускается Cron:

user@serverB:~/$ crontab -l | grep 'backup-get-serverA.sh'
35 2,7,13 * * * $HOME/bin/backup-get-serverA.sh >> $HOME/cron.log 2>&1

Подход 2

Другой способ, который я могу себе представить, — настроить третий экземпляр, который может войти через SSH как на сервер A, так и на сервер B, и использовать scpкоманду для копирования файла с A на B.

scp -3 serverA:/path/to/the/file serverB:/path/to/sore/
  • Хосты serverA и serverB настроены в третьем экземпляре. ~/.ssh/config

Обратите внимание на опцию -3, которая заставляет третий экземпляр работать как промежуточный сервер. В случае, если эта опция не представлена, сервер A будет проинструктирован о подключении к серверу B. Эта опция отключает индикатор выполнения.

Такой вариант rsync не поддерживается,  но та же логика может быть реализована скриптом.

Вот таким образом можно решить.

...