LINUX.ORG.RU

Rsync, SSH и Expext

 , , ,


0

2

Задача: автобэкап RSYNC`ом по SSH, но без авторизации по ключам, без Perl и Python.

На сервере нельзя сделать ключи для автоматической авторизации SSH (можно, но при перезапуске содержимое каталога будет сброшено). Для автоматизации процесса логина по SSH подходит EXPECT, однако всё обламывает RSYNC:

Часть скрипта:

rsync --rsync-path="mkdir -p $DST/Processing-$date && rsync" $args
В переменной args хранятся прочие паремнтры бэкапа. А вот rsync-path приходится писать отдельно, потому что при попытке передать его в переменной - rsync начинает жаловаться на незакрытую кавычку.

Гугление этой проблемы привело сюда: http://www.scriptscoop.net/t/71fc79314eee/bash-random-single-quotes-being-add... Общая суть ответа: «всё правильно, так и должно быть и это не исправимо никак, даже не пытайтесь.»

Теперь у меня возникает вопрос: это что, безвыходная ситуация?

На всякий случай приведу полную команду RSYNC`ка:

rsync --rsync-path="mkdir -p $DST/Processing-$date && rsync" -axpz --delete --link-dest=../Latest --numeric-ids ~/ToBackup/ netuser@server:$DST/Processing-$date

Может, есть возможность поиграть с параметром rsync-path, или что-то ещё придумать?

★★

На сервере нельзя сделать ключи для автоматической авторизации SSH (можно, но при перезапуске содержимое каталога будет сброшено)

Вот с этого момента поподробнее: какого каталога?

zolden ★★★★★
()
Ответ на: комментарий от zolden

Китайская трофейная файлопомойка

Расчитана на WebDAV и Samba, однако внутри линукс и ext4, ssh эта штука имеет в качестве отладки. У ssh-пользователей этой системы нет хомяка, и если в ssh-сессии создавать конфиги - они создаются в темпах и теряюся при перезагрузке.

При этом в ssh-сессии доступен rsync и при ручном вводе команд можно без проблем бэкаприть и восстанавливать любые данные. И вот тут-то из-за особенности синтаксиса параметра rsync-path начинаюся проблемы с автоматизацией бэкапа.

zzdnx ★★
() автор топика
Последнее исправление: zzdnx (всего исправлений: 2)
Ответ на: Китайская трофейная файлопомойка от zzdnx

Временное решение проблемы

Так как rsync-path нужен для создания на сервере недостающего каталога, и rsync без этого параметра свободно работает в expect было принято решение: сделать к серверу больше обращений через утилиту expect с целью убрать из команды rsync глючный параметр "--rsync-path".

Такая конструкция работает и выглядит следующим образом:

expect для создания на сервере каталога, который должен был создаваться параметром "--rsync-path".
expect для создания резервной копии rsync`ом в каталоге, который был создан предыдущим expect`ом.
expect для финализирующей обработки созданой резервной копии.
Понимаю что это маразм, но, всё же, это лучше, чем создание временного файла и его исполнение...

zzdnx ★★
() автор топика
Ответ на: комментарий от anonymous

Не совсем подходит

Представь себе, друг, но там нет даже хомяка. Я уже не говорю о каталоге ssh`а, в который нужно закидывать ключи. Предлагаешь мне логиниться через expect и создавать профиль по аналогии с писюковым? Прости, но не совсем подходит.

zzdnx ★★
() автор топика

http://sshpass.sourceforge.net/
скорее всего уже есть в репозитории твоего дистра.
с рсинк не пробовал но в мане есть:
EXAMPLES
Run rsync over SSH using password authentication, passing the password on the command line:

rsync --rsh='sshpass -p 12345 ssh -l test' host.example.com:path .

To do the same from a bourne shell script in a marginally less exposed way:

SSHPASS=12345 rsync --rsh='sshpass -e ssh -l test' host.example.com:path .

bl ★★★
()
Ответ на: комментарий от zolden

Ключи могут храниться где угодно.

Я понимаю почему мне дают именно такие ответы - мне советуют сделать «как правильно» и это хорошо, однако у меня есть 2 нюанса, о которых я не упоминал ранее.

1) Система файлопомойки живёт во флэш-памяти на RO-фс. Именно там все основные конфиги OC, в том числе и ssh. Проблема: я не могу найти в конфигах помойки то место, куда можно прописать мой скрипт, (например, перезапускающий ssh-демон с моим конфигом вместо системного).

Из-за этого при каждой перезагрузке файлопомойки я «теряю» свои конфиги. Мне нужно после каждой загрузки заходить пинком перезапускать ssh.

2) Я сейчас пишу скрипт для автобэкапа (в том числе и на эту файлопомойку). Столкнувшись с описаной в этой теме проблемой мне захотелось дописать в свой скрипт обработку именно такой ситуации - известен ssh-логин, ключей под рукой нет и нет времени/возможности/желания прямо сейчас это исправить, а вот бэкапы нужно настроить уже !!!СЕЙЧАС!!!...

Я понимаю что это не правильно, но в некоторых случаях именно это может оказаться полезным и нужным.

zzdnx ★★
() автор топика
Ответ на: комментарий от bl

SSHPASS - это хорошая штука, но...

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

Цель минимизации: чтобы этот скрипт мог одинаково работать на 99% платформ без установки дополнительных пакетов или обновления имеющихся.

К сожалению, из-за специфической работы одного параметра rsync мне уже пришлось сделать допущение - условно-необходимая зависимость: expect.

Если можно обойтись решением на fifo-файлах - буду очень рад избавлению от зависимости.

zzdnx ★★
() автор топика
Ответ на: Ключи могут храниться где угодно. от zzdnx

мне советуют сделать «как правильно»

скорее как проще

не могу найти в конфигах помойки то место, куда можно прописать мой скрипт

Я бы предложил плясать от директорий где явно не RO, где-то же и как-то же меняются конфиги IP адресов, например

zolden ★★★★★
()
Ответ на: комментарий от zolden

Ну так что по сабжу?

Существует-ли метод обхода для «особого синтаксиса» параметра rsync-path?

rsync --rsync-path="mkdir ... && rsync"
Или это приговор?

Если это приговор, то ещё один вопрос: можно-ли как-нибудь обойтись без expect? Я пробовал сделать ssh-авторизацию на fifo-файлах, но либо я что-то делал не так, либо ssh-авторизация не проходит через fifo.

Находил упоминания, что empty можно применять как аналог expect, но быстрый гуглёж не дал мне понятных примеров. Если empty заменяет expect - прошу меня направить на какой-нибудь русскоязычный ман по empty.

zzdnx ★★
() автор топика
Ответ на: Ну так что по сабжу? от zzdnx

Как я понял, ответа в этом треде я получить уже не смогу.

Тред дпано покинул первую страницу и его не видят. Создам новый...

zzdnx ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.