Полный бекап с помощью tar+scp+expect

Девушка и пивоКоллеги, сегодня я хочу поделиться с вами небольшим скриптом полного бекапирования сервера и выгрузки архива на внешний SFTP-сервер. Архивирование производилось как обычно, с помощью tar, с игнорированием некоторых ненужных каталогов. Затем следовало бы выгрузить этот архив по протоколу SCP на другой сервер, однако последний не поддерживал доступ по ключам.

Немного поискав в инете, я нашел, что можно передавать пароль программе scp с помощью утилиты expect. Вкратце, expect позволяет имитировать действия пользователя, выполняя определенные инструкции в зависимости от текстового вывода в консоли. Например, с помощью expect можно организовать беспарольный SSH-доступ, когда сам сервер не поддерживает доступ по ключам.

Так мы и поступим. Сначала генерируем дату вида 2012-11-01 (немного костыльным способом, но хотелось все запихать в один файл, без аргументов). Создаем полный tar-архив. И, наконец, тыкаемся с помощью scp на сервер. Программа, что логично, спрашивает пароль, а более конкретно – выводит приглашение “password:”. Его-то мы как раз и ожидаем (expect – игра слов). После чего посылаем пароль. Все остальное сделает scp.

Теперь остается запихать этот скрипт в /etc/crontab и идти пить пиво.

#!/usr/bin/expect -f

set timeout 100
set HOST "REMOTE_SFTP_SERVER"
set USER "VERY_SECRET_LOGIN"
set PASS "VERY_SECRET_PASSWORD"

spawn date "+%Y-%m-%d"
expect -re "(.*)\r\n"
set DATE $expect_out(1,string)

spawn /bin/tar --exclude=/var/backups --exclude=/dev --exclude=/sys --exclude=/proc -cf /var/backups/$DATE.tar /
expect eof
spawn scp /var/backups/$DATE.tar $USER@$HOST:/
expect "password: "
send "$PASS\r"
expect eof

Похожие статьи

Leave a Reply

Your email address will not be published. Required fields are marked *