Войти через loginza
Закрыть панель

19

Авг

2010

Автоматизация telnet, ssh и ftp сессий

Распечатать статью Разместил: spider. Рубрика Linux |

В этой статье хочу рассказать о замечательной утилите, которая значительно облегчает админскую жизнь – expect.

Дело в том, что очень часто приходится пользоваться одними и теми же командами по протоколам  telnet, ssh и ftp.

Дело за малым – автоматизировать процесс.

В этом поможет expect.

По материалам Википедии : Expect — инструмент для автоматизации и тестирования в ОС Unix, написанный Don Libes как расширение к скрипт-языку Tcl, для интерактивных приложений таких, как telnet, ftp, passwd, fsck, rlogin, tip, ssh, и других. С помощью Tk интерактивные приложения могут быть использованы с графическим интерфейсом (GUI) X11.

Там же можно посмотреть и примеры скриптов :

Простой пример скрипта, который автоматизирует сессию telnet:

Раскрыть »

######################################################################################
   #$remote_server - сервер, к которому осуществляется доступ                           #
   #$my_user_id    - имя пользователя на сервере                                        #
   #$my_password   - пароль пользователя на сервере                                     #
   #$my_command    - команда, которая будет запущена на сервере                         #
   #                                                                                    #
   # Предполагается, что $remote_server, $my_user_id, $my_password, и $my_command       #
   # были инициализированы в скрипте ранее.                                             #
   ######################################################################################
   # Открываем telnet сессию на удалённом сервере, и ждем запроса имени пользователя.
   spawn telnet $remote_server
   expect "username:"
   # Посылаем имя пользователя и ждем запроса пароля.
   send "$my_user_id\r"
   expect "password:"
   # Посылаем пароль и ждем приглашения ввода командного интерпретатора.
   send "$my_password\r"
   expect "%"<br />
   # Посылаем команду, и ждем следующего приглашения ввода командного интерпретатора.
   send "$my_command\r"
   expect "%"
   # Запоминаем результат в переменной. Он может быть отображён, или записан на диск.
   set results $expect_out(buffer)
   # Завершаем сессию telnet, и ждем символа конца строки (eof).
   send "exit\r"
   expect eof

Ещё один скрипт, который в качестве примера автоматизирует ftp-сессию:

Раскрыть »

# Открыть ftp-сессию на удалённом сервере, и ждать запроса имени пользователя.
   spawn ftp $remote_server
   expect "username:"
   # Послать имя пользователя, и ждать приглашения ввода пароля.
   send "$my_user_id\r"
   expect "password:"
   # Послать пароль, и ждать приглашения ввода ftp.
   send "$my_password\r"
   expect "ftp>"
   # Переключиться в бинарный режим, и снова ждать приглашения ввода ftp.
   send "bin\r"
   expect "ftp&gt;"
   # Выключить приглашение ввода.
   send "prompt\r"
   expect "ftp>"
   # Получить все файлы
   send "mget *\r"
   expect "ftp>"
   # Закончить ftp-сессию и ждать спецсимвол конца файла (eof).
   send "bye\r"
   expect eof

Если честно – у меня толком это так и не заработало.
Может дело в разных версиях expect.
А может в синтаксисе.
Давайте рассмотрим основные принципы работы утилиты.
Насколько я понял – все достаточно просто:

  • spawn – выполняет любую внешнюю команду.
  • expect – пишем ожидаемый от внешней команды вопрос.
  • send – а тут указываем на него ответ.

Ниже предлагаю свой скрипт автоматической заливки на ftp архива сделанного из статьи раньше про автоматическое резервирование.

Раскрыть »

#!/usr/bin/expect -f
 
set timeout 3600
log_user 1                                 # Отключаем вывод, чтобы не мешался
# Открываем ftp сессию на удаленном сервере
spawn ftp 192.168.5.8
# Дожидаемся запроса имени пользователя
expect "Name (192.168.5.8:root):"
#посылаем имя пользователя
send "user\r"
#Ждем ввода пароля
expect "Password:"
# посылаем пароль
send "password\r"
#ждем приглашения от фтп сервера
expect "ftp>"
# Посылаем файл на фтп
send "put /media/disk-1/backup/*\r"
# Завершаем сессию ftp
expect "ftp>"
send "bye\r"
expect eof

set timeout 3600 – так как стандартный таймаут 10 секунд скрипт не дожидался загрузки довольно большого архива на фтп и принудительно завершал сессию. Увеличение таймаута приведет к более долгому ожиданию и позволит загрузить файл на фтп. Величину таймаута определяйте опытным путем, например, попробуйте залить такой файл вручную и накиньте 10%.

 

17

Авг

2010

Скрипт автоматического резервирования

Распечатать статью Разместил: spider. Рубрика Linux |

Давно назревала необходимость бэкапить системные файлы.

Что же в Linux самого важного и основного ?

На этот вопрос каждый админ сам даст себе ответ.

А если нет – то вот мой вариант.

Идеи были взяты с хабрахабра и опеннет.

Код скрипта для бэкапа:

Раскрыть »

#!/bin/sh
# Описываем базовые директории
###################################################################
# Права на скрипт принадлежат Spider http://www.bsyteam.net ###
###################################################################
BACKUP="/media/disk-1/backup"
TEMP="/var/backup/temp" #Папка удаляется после выполнения скрипта !
PREFIX=`hostname -s`_`date +%d.%m.%y-%H.%M`
echo "$PREFIX"
echo "clean backup folder ..."
rm -rf $BACKUP
# Описываем папки backupов
 # Файлы системы
 ETC="$TEMP/etc/"
 ETC2="$TEMP/usr/local/etc/"
 HOME="$TEMP/home/"
 # Файлы сервера
 WWW="$TEMP/www/"
 MYSQL="$TEMP/mysql/"
 VSFTP="$TEMP/vsftp/"
 LOG="$TEMP/LOG/"
 MDC="$TEMP/media/microdc2/"
 MDC2="$TEMP/.microdc2/"
# Создаем необходимые папки
echo "# Создаем необходимые папки"
mkdir -p $BACKUP
mkdir -p $TEMP
mkdir -p $ETC
mkdir -p $ETC2
mkdir -p $WWW
mkdir -p $MYSQL
mkdir -p $VSFTP
mkdir -p $LOG
mkdir -p $MDC
mkdir -p $MDC2
mkdir -p $HOME
 
# Копируем файлы в созданые папки
echo "# Копируем файлы в $ETC"
cp -r /etc/* $ETC
echo "# Копируем файлы в $ETC2"
cp -r /usr/local/etc/* $ETC2
echo "# Копируем файлы в $WWW"
cp -r /var/www/* $WWW
echo "# Копируем файлы в $VSFTP"
cp -r /var/dbase/* $VSFTP
echo "# Копируем файлы в $LOG"
cp -r /var/log/* $LOG
echo "# Копируем файлы в $MDC"
cp -r /media/microdc2/* $MDC
echo "# Копируем файлы в $MDC2"
cp -r /.microdc2/* $MDC2
echo "# Копируем файлы в $HOME"
cp -r /home/* $HOME
 
# Бэкапим mysql базы
echo "# Бэкапим mysql базы"
mysqldump -ubackup -P3306 -hlocalhost -ppass dbase1 &gt; $MYSQL/dbase1.sql
 
#....................................................................................................................... 
 
mysqldump -ubackup -P3306 -hlocalhost -ppass dbase10 &gt; $MYSQL/dbase10.sql
 
# Переходим в каталог с копиями
cd $TEMP
# Создаем архив
echo "# Создаем архив"
tar -czvf $BACKUP/$PREFIX.tar.gz *
 
# Очищаем папку temp
echo "# Очищаем папку temp"
rm -rf $TEMP
echo "$PREFIX"
#выход
exit 0
 

16

Авг

2010

Вышла новая версия iptable

Распечатать статью Разместил: spider. Рубрика Linux, Новости |

Вышла новая версия iptables — набора инструментов для управления IPv4- и IPv6-сегментами системы фильтрации и преобразования пакетов netfilter (сам netfilter является частью ядра Linux).

В iptables 1.4.9 реализована полная совместимость с вышедшим недавно ядром Linux 2.6.35, а также внесен ряд других улучшений:

* Добавлена поддержка нового действия LED, позволяющего использовать доступные системе световые индикаторы для сигнализации о прохождении пакетов через заданные правила. Например, следующая последовательность команд обеспечит включение на одну секунду выбранного индикатора при поступлении входящего пакета на TCP-порт 22 (SSH):

iptables -I INPUT -p tcp –dport 22 -j LED –led-trigger-id ssh –led-delay 1000

echo netfilter-ssh > /sys/class/leds/имя_индикатора/trigger

* Добавлена поддержка действия TEE, позволяющего выполнять зеркалирование определенного трафика на заданный хост. Например,

iptables -t mangle -A PREROUTING -i eth0 -j TEE –gateway 192.168.0.2

обеспечит копирование всего входящего через eth0 трафика и отправку его копии на хост 192.168.0.2 (хост-получатель должен находиться в одном сегменте сети с нашим хостом).

Ранее это действие было доступно только в комплекте xtables-addons (данный проект является современным аналогом patch-o-matic).

* Обновлены инструменты для обеспечения взаимодействия netfilter и ipset.

ipset — набор модулей для ядра Linux и одноименная управляющая утилита, в совокупности обеспечивающие возможность хранить в памяти огромные списки IP-адресов, подсетей и портов, а также очень быстро проверять заданные адреса и порты на предмет нахождения в этих списках. Одно из ключевых новшеств ожидаемого в ближайшем будущем релиза ipset 5 — поддержка семейства адресов IPv6.

Изменения, внесенные на уровне iptables в критерий set (этот критерий позволяет проверять адреса и порты обрабатываемых пакетов на наличие в заданных списках) и в действие SET (позволяет добавлять адреса и порты обрабатываемых пакетов в заданные списки, либо удалять из них), отражают грядущие нововведения — теперь эти инструменты можно вызывать не только из iptables, но и из ip6tables.

* Добавлена возможность логического отрицания в критерии quota, что упрощает обработку пакетов, выходящих за рамки квоты.

* Улучшена поддержка протокола SCTP: добавлено распознавание типа секции (chunk) FORWARD_TSN и флага SACK-IMMEDIATELY в DATA-секции.

* Исправлен ряд мелких ошибок в коде и документации.

По материалам securitylab.ru

 
  • FireStats

    • Показано страниц :104007
    • Уникальных посетителей:45837
    • Показано страниц за сутки :310
    • Уникальных посетителей за сутки :165