Назад | Перейти на главную страницу

Имена переменных каталогов через SCP

У нас есть процедура резервного копирования, которая ранее выполнялась с одного диска на другой на том же сервере, но недавно переместила исходные данные на удаленный сервер и пытается реплицировать задание через scp.

Нам нужно запустить сценарий на целевом сервере, и мы настроили scp на основе ключей (имя пользователя / пароль не требуется) между двумя серверами. Использование scp для копирования определенных файлов и каталогов отлично работает:

scp -r -p -B buser@10.0.0.1:/mnt/disk1/bsource/filename.txt /mnt/disk2/btarget/

Однако наша предыдущая процедура перебирает каталоги на исходном диске, чтобы определить, какие файлы копировать, а затем запускает их по отдельности с помощью шифрования gpg. Есть ли способ сделать это только с помощью scp?

Опять же, этот сценарий должен запускаться с целевого сервера, а пользователь, от имени которого выполняется задание, имеет только scp (без ssh) доступ к целевой системе.

Старая работа будет выглядеть примерно так:

#Change to source dir
cd /mnt/disk1

#Create variable to store 
# directories named by date YYYYMMDD
j="20000101/"

#Iterate though directories in the current dir
# to get the most recent folder name
for i in $(ls -d */);
do
 if [ "$j" \< "$i" ]; then
  j=${i%/*}
 fi
done

#Encrypt individual files from $j to target directory
cd ./${j%%}/bsource/
for k in $(ls -p | grep -v /$);
do
 sudo /usr/bin/gpg -e -r "Backup Key" --batch --no-tty -o "/mnt/disk2/btarget/$k.gpg" "$/mnt/disk1/$j/bsource/$k"
done

Может ли кто-нибудь подсказать, как это сделать через scp из целевой системы? Заранее спасибо.

РЕДАКТИРОВАТЬ: Со всеми однострочниками bash, которые я вижу здесь летающими, я почти ожидал, что через несколько секунд появится какая-нибудь эпическая вещь с cat, grep и, возможно, '>> или двумя между несколькими трубками. Ах хорошо. ;-)

Не знаю, может ли sshfs стать для вас решением. Таким образом, вам не нужно будет разрешать неограниченный ssh, и вам даже не придется менять свой сценарий bash. (Я предполагаю, что производительность будет несколько хуже, и, возможно, у вас есть дополнительные требования, которые не позволяют этот подход.)

Запустите аналогичную версию более раннего сценария на исходном сервере с помощью cron, где он архивирует и шифрует все файлы в каталог. Через соответствующий интервал после этого установите cron на целевом сервере rsync через SSH в этом месте. Вы можете использовать scp, но у rsync есть много преимуществ.

В противном случае я бы отказался от ваших требований и запустил гибридное решение по требованию с целевого объекта с использованием каналов SSH.

ОБНОВИТЬ: После некоторых экспериментов я разработал, как передать scp в gpg с целевого сервера через stdout:

scp -r -p -B buser@10.0.0.1:/mnt/disk1/bsource/filename /dev/stdout | gpg -e -r "Backup Key" --batch --no-tty -o "filename.gpg" 

Я думаю, что для второй половины этого я запущу задание сортировки на исходном сервере и выведу полученное имя каталога в текстовый файл в статическом месте, который сначала будет scp'd из целевой системы, а затем cat'd в переменную исходного местоположения.