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

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
sasha300
Сообщения: 131
Зарегистрирован: 31 мар 2023, 08:56
Решено: 6
Откуда: СПб
Благодарил (а): 92 раза
Поблагодарили: 6 раз
Контактная информация:

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

#1

23 сен 2023, 08:23

: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:

Решение sasha300 » 24 сен 2023, 21:15
Результат:

сам скрипт:

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

#!/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:

Перейти к ответу ➙
LM 21.3 Xfce HW probe


Аватара пользователя

FreeStyler
Сообщения: 798
Зарегистрирован: 23 июл 2018, 07:58
Решено: 6
Откуда: Сиб
Благодарил (а): 756 раз
Поблагодарили: 94 раза
Контактная информация:

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

#3

23 сен 2023, 09:11

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'
deadmau5 - Harmonic Mix
■ KDE Neon 22.04 (UE) @ Lenovo IdeaPad 3-15 Ryzen 5 4500U, 18 Гб DDR-4, 128 Gb SSD +1 Gb SSD 1920x1080

Аватара пользователя

demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

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

#4

23 сен 2023, 09:19

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
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

Автор темы
sasha300
Сообщения: 131
Зарегистрирован: 31 мар 2023, 08:56
Решено: 6
Откуда: СПб
Благодарил (а): 92 раза
Поблагодарили: 6 раз
Контактная информация:

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

#5

24 сен 2023, 13:00

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:
LM 21.3 Xfce HW probe

Аватара пользователя

Автор темы
sasha300
Сообщения: 131
Зарегистрирован: 31 мар 2023, 08:56
Решено: 6
Откуда: СПб
Благодарил (а): 92 раза
Поблагодарили: 6 раз
Контактная информация:

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

#6

24 сен 2023, 13:23

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

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

Аватара пользователя

Автор темы
sasha300
Сообщения: 131
Зарегистрирован: 31 мар 2023, 08:56
Решено: 6
Откуда: СПб
Благодарил (а): 92 раза
Поблагодарили: 6 раз
Контактная информация:

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

#7

24 сен 2023, 21:15

Результат:

сам скрипт:

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

#!/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:
LM 21.3 Xfce HW probe

Ответить

Вернуться в «Программирование, скриптинг, виртуализация»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя