Страница 1 из 1

Как в скрипте уменьшить кол-во ввода парольной фразы до одного раза?

Добавлено: 23 сен 2023, 08:23
sasha300
:hi3:

Написал bash скрипт для создания бекапа на локальном сервере с VDS, используя ssh ключи c парольной фразой.
Пример:

Код: Выделить всё

#!/bin/bash
cd /home/user/; 
mkdir `date +%Y_%m_%d`;
cd `date +%Y_%m_%d`;
rsync -e "ssh -i /home/user/.ssh/key" -avh --rsync-path="rsync" --progress user@ip_remote_comp:/home/user/test /home/user/`date +%Y_%m_%d`;
rsync -e "ssh -i /home/user/.ssh/key" -avh --rsync-path="rsync" --progress user@ip_remote_comp:/var/www/example.com/test2 /home/user/`date +%Y_%m_%d`;
При выполнении rsync, идет запрос парольной фразы. В рабочем коде 5 строк с rsync и обращение к ключу происходит тоже 5 раз и напрягает каждый раз вводить один и тот же пароль. Можно удалить парольную фразу от ssh ключа, но мы ведь не ищем легких путей ;)
Попытался засунуть все синхронизируемые директории в одну строчку, но применить амперсанд (&), либо AND не получилось; man по rsync выдает, что можно юзать include и exclude, но эти параметры актуальны, когда синхронизируемые данные находяться в одной директории, а у меня они в разных местах..
Витает мысль, чтобы разместить команды в отдельный блок, а выше сделать одноразовое обращение к ssh ключу, но примеры такого подхода я не нашел.
Вобщем посоветуйте, пожалуйста, кто как бы поступил?
Заранее признателен за ответ! :vic:

Как в скрипте уменьшить кол-во ввода парольной фразы до одного раза?

Добавлено: 23 сен 2023, 08:31
symon2014
Цикл do while , или типа того ?

Как в скрипте уменьшить кол-во ввода парольной фразы до одного раза?

Добавлено: 23 сен 2023, 09:11
FreeStyler
sasha300, не проверял, но вроде как можно настроить ssh серв чтобы пускал без пароля
https://linuxiac.com/ssh-login-without-password
https://www.tecmint.com/ssh-passwordles ... easy-steps
Есть ещё spawn и expect, чтобы за тебя пароль вводили, но не знаю получится ли их задействовать в такой конфиге с rsync.
Просто подключение настраивается так expect -c 'spawn ssh <uname>@<address> -p <port>; expect "password"; send "<pass>\n"; interact'

Как в скрипте уменьшить кол-во ввода парольной фразы до одного раза?

Добавлено: 23 сен 2023, 09:19
demonlibra
sasha300 писал(а):
23 сен 2023, 08:23
В рабочем коде 5 строк с rsync
Оформите копирование одной командой rsync, записав список того, что нужно копировать, в файл.
--include-from=FILE read include patterns from FILE
--files-from=FILE read list of source-file names from FILE

Как в скрипте уменьшить кол-во ввода парольной фразы до одного раза?

Добавлено: 24 сен 2023, 13:00
sasha300
demonlibra писал(а):
23 сен 2023, 09:19
Оформите копирование одной командой rsync, записав список того, что нужно копировать, в файл.
Сегодня рыл в этом направлении, но повторюсь, все 5 директорий, бекап которых нужно сделать, находятся в разных местах. Для чистоты эксперимента я отказался от ssh, просто юзал rsync с параметрами, так даже в таком исполнении финт с включением директории за пределы исходной папки не прокатывает.
Т.е. команда:

Код: Выделить всё

 rsync -avzh --include '/home/sas/www' /home/sas/temp/ /home/sas/destination
синхронизировала содержимое только с директории /home/sas/temp/ в /home/sas/destination, причем

Код: Выделить всё

--include '/home/sas/www' 
игнорировался, впрочем, man rsync говорит о том, что include содержимое должно быть в источнике, т.е. в /home/sas/temp/, поэтому и не прокатывет включение директории из вне.
Появилась идея сделать так, чтобы исходником выступила корневая директория /, затем --exclude все исключает, а после этого --include добавляет требуемые директории, но это в процессе тестирования.. :dash2:

Как в скрипте уменьшить кол-во ввода парольной фразы до одного раза?

Добавлено: 24 сен 2023, 13:23
sasha300

Код: Выделить всё

rsync -avzh --include 'temp/***' --include 'picture/***' --exclude '*' /home/sas/ /home/sas/destinationd
этот код рабочий, пора переносить директории в файл и выводить источник синхронизаций в корневую директорию, ну а затем все это переносить под ssh , по факту экспериментов дополню пост

Как в скрипте уменьшить кол-во ввода парольной фразы до одного раза?

Добавлено: 24 сен 2023, 21:15
sasha300
Результат:

сам скрипт:

Код: Выделить всё

#!/bin/bash
cd /home/user/; 
mkdir `date +%Y_%m_%d`;
rsync -e "ssh -p port_change -i /home/user/.ssh/openssh_key" -avzh --include-from='include.txt' --exclude '*' --rsync-path="rsync" --progress user@ip_server:/ /home/user/`date +%Y_%m_%d`;
user@ip_server:/ ссылается на корневую директорию сервера, но параметр --exclude '*' все глушит, но самая вишенка в содержимом файле include.txt:

Код: Выделить всё

+ home/
+ home/user/
+ home/user/directory/***
+ var/
+ var/www/
+ var/www/directory/***
и так хоть двести директорий..
т.е. следуя man rsync:
If a pattern excludes a particular parent directory, it can render a deeper include pattern ineffectual because rsync did not descend through that excluded section of the hierarchy. This is particularly important when using a trailing ’*’ rule. For instance, this won’t work:

+ /some/path/this-file-will-not-be-found
+ /file-is-included
- *

This fails because the parent directory "some" is excluded by the ’*’ rule, so rsync never visits any of the files in the "some" or "some/path" directories. One solution is to ask for all directories in the hierarchy to be included by using a single rule: "+ */" (put it somewhere before the "- *" rule), and perhaps use the --prune-empty-dirs option. Another solution is to add specific include rules for all the parent dirs that need to be visited. For instance, this set of rules works fine:

+ /some/
+ /some/path/
+ /some/path/this-file-is-found
+ /file-also-included
- *
получается, что для успешной синхронизации директорий, находящихся в разных местах, надо писать include файл последовательно, сначала одна директория, затем директория/директория, потом директория/директория/директория и так уже до нужной папки.
Вопрос исчерпан, всем добра!

p.s.: Респект demonlibra, что навел на правильный вектор.. :thumbs: