готовые скрипты для системного администратора

Скрипты для ленивых Windows-админов

Будучи какое-то время назад админом (ленивым), написал несколько скриптов, автоматизирующих рутину и позволяющих еще больше лениться. Админством я больше не занимаюсь, а скрипты выкладываю, может кому пригодятся.

1. Авто-установка описания компьютера локально и в AD

В компании был стандарт на наименование компьютеров, что-то вроде COMPUTERxxxx (xxxx — это цифра), соответсвенно Хелпдеску было сложно по имени человека найти компьютер для начальной диагностики и удаленного подключения, а объяснение рядовому пользователю как определить имя компьютера занимало много времени. Решение пришло в виде скрипта.

После запуска шерстит все компьютеры из указанных OU и устанавливает описание в зависимости от залогиненного пользователя.

* Скрипт должен запускаться от учетки, имеющей админские права на компьютерах и доступ на изменение описания компьютера в AD.
** Не корректно работает на Windows 2000, если залогиненый пользователь не локальный администратор, с Windows Vista не тестировался.

Перед запуском нужно настроить скрипт.

2. Авто-очистка «папки обмена»

Каждый отдел в компании имел свою папку, куда не имели доступ другие отделы. Для обмен информацией между отделами (презентации, текст, да и музыка) извращались как могли. Пришлось создать папку для обмена и скрипт, очищаюший ее, чтобы информация там не залеживалась.

Логика скрипта: файлы, со дня создания/модификации которых прошло 10 дней, помещаются в спец папку внутри папки обмена (_deletion_queue_), после чего из папки «на удаление», через 7 дней, файлы удаляются совсем.

Все настраивается переменными в скрипте.

3. Редирект «Избранного»

Microsoft предусмотрела редирект практически всего, кроме «Избранного». Почему — загадка. В компании было жесткое правило, чтобы все данные хранились на серверах. Потеря «Избранного», конечно, не смертельна, но неприятна. Поэтому я написал скрипт, который делает редирект «Избранного» в папку на сервере.

PS. Скрипты писались «для себя», поэтому, перед использованием настройте и проверьте на чем-нибудь не важном 🙂

Источник

Сервис для системного администратора. Часть 1

готовые скрипты для системного администратора

1. Предисловие

Задачи системного администратора — разнообразны. Работа в консоли — создание пользователей, тестирование, установка и конфигурация пакетов на серверах, просмотр логов и трафика, настройка сети и туннелей. Работа с железом — установка оборудования и документацией, написание планов работ, описание работы сервисов.

Системные администраторы имеют большое количество скриптов для автоматизации. Хранятся они, обычно, в их домашних папках (и хорошо если не только там, но и в CVS), периодически апдейтятся на новую функциональность. Как правило, использовать такие скрипты могут лишь те же люди которые их пишут (а, иначе, последствия могут быть самыми разрушительными).

Таким образом — задачи по автоматизации часто нуждаются в простом GUI для удобного управления, упрощения. Например — сбор трафика. Или возможность откатывать бекапы/релизы по кнопке (даже если кто-то катится пакетами через SCM систему). Или менять Mysql master без подглядывания консоль ( какое-то количество ошибок возникает из-за неверно забитой в команды, не на том сервере).

Современные технологии предлагают большое количество вариантов для быстрого написания своего сервиса с приличным GUI. Мы разберем пример клиент-серверного взаимодействия и напишем наш, собственный REST api сервис используя технологии Jquery, Bootstrap, язык программирования Python и библиотеку python-flask. Хранить данные мы будем в текстовом файле.

В качестве клиента к нашему REST api будет выступать обычная html страничка с некоторым javascript кодом.

Статья рассчитана на системных администраторов которым изредка приходится делать небольшие наколеночные решения. Работать будем в операционной системе Linux Ubuntu 12.04. Тот же набор технологий можно использовать в любой другой ОС (Windows, Mac, Freebsd ).

2. Про технологии

готовые скрипты для системного администратора

REST — набор общепринятых рекомендаций, следуя которым можно построить backend под который стороннему разработчику будет удобно писать клиентское приложение и/или frontend. Забегая вперед — мы немного отклонимся от этих рекомендаций, и будем использовать изначально идемпотентный метод GET для добавления новой информации на сервер.

Bootstrap — набор стилей и шаблонов html который позволит нам не думать над оформлением нашей страницы, использовать готовые элементы.

Jquery — javascript библиотека которая расширяет возможности языка и позволяет использовать готовые удобные функции для, например, формирования GET запросов.

Python-flask — библиотека для языка Python которая позволит в несколько строчек кода написать web-сервер.

3. Делаем backend

готовые скрипты для системного администратора

3.1 Создаем директории в которых будем работать и server.py

Server.py — это файл из которого будет запускаться наш мини-вебсервер.

Содержимое файла /var/www/server.py:

3.2 Запускаем

Для того чтобы запустить наш сервер нам нужно всего лишь вызвать его в консоли.
Если хотим запустить процесс в бекграунд, то так же можно воспользоваться знаком лягушка — &. Еще его можно запустить с nohup — тогда процесс не умрёт по выходу из консоли.

Меняем права на запуск файла и запускаем:

3.3 Проверяем

Видим что наш вебсервер запустился на порту 5000. Теперь мы можем зайти на него в браузере:

готовые скрипты для системного администратора

Мы немного упрощаем себе задачу и запускаем наш сервер прямо из командной строки.
Кроме всего прочего — это позволяет нам видеть debug вывод, и понимать, кто постучался на наш сервис — самое то для тестирования.
Если мы захотим распараллелить его запуск — то можем воспользоваться чем-нибудь вроде uwsgi. Кроме этого, upstart в ubuntu может запускать процесс форкая его от самого себя.

3.4 Учим server.py backend выполнять предварительно написанный bash скрипт

Пусть у нас будет три ручки /install_mc, /uninstall_mc и /
Первые две — выполняют Bash — скрипты которые, соответственно, ставят и удаляют Midnight Commander. Последняя — полноценный бекдор на сервер, позволяет выполнить любую команду отправленную в параметр cmd get-запроса (в продакшене использовать не надо, приведено для примера).

Кажется, здесь все просто. Bash:

Запускаем server.py и стучимся по ручкам. Наш backdoor:

готовые скрипты для системного администратора

Удалим Midnight Commander:

готовые скрипты для системного администратора

готовые скрипты для системного администратора

В этом примере я перевесил сервис на 80 ый порт, дописав port=80 параметром для app.test. Этот порт используется по умолчанию браузером, поэтому нет необходимости дописывать :80 к урлу.

3.5 Выводим полученные аргументы в ответе

Вернемся к нашей первой заготовке.
В backdoor — ручке мы передаем серверу определенные аргументы — cmd, которые должны выполниться на сервере.

Давайте выведем аргументы которые мы посылаем серверу — в ответе (кстати, с помощью функции print удобно выводить их прямо в консоль) этого самого сервера. Приведем server.py к следующему виду (не забываем его перезапустить после изменения кода):

Постучимся теперь с любыми аргументами и return в функции add вернет нам то, что мы послали:

готовые скрипты для системного администратора

3.6 Учим server.py backend сохранять данные в текстовый файл

Теперь у нас есть некоторый каркас сервиса на базе python flask который умеет отсылать нам обратно то, что ему было отправлено. Но мы хотим красивые кнопочки работать с ручками из frontend’а. И данные нам нужно не только возвращать, но и где-то сохранять.

Сделаем небольшой аналог базы данных через текстовый файл, доступ в которую обеспечивается некоторым количеством http — ручек.

И давайте же запишем в него что-нибудь!

Немного улучшаем наш код.

Здесь мы добавили метод /get и дописали код в методы /remove и /add.

Для того чтобы мы могли отдавать данные — нам нужно где-то их хранить. В данном случае я выбрал местом хранения обычный txt файл — data.txt (это чревато, позже расскажу — почему).

Кроме того, мы теперь запускаем app_test объект с дополнительным параметром:
debug=True. И теперь, если мы изменяем код в текстовом редакторе, наш сервер будет автоматически перезапускаться, а в случае возникновения каких либо ошибок — он напечатает в каком именно месте они возникли.

Когда к нам в строке запроса поступает информация в аргументах — мы делаем на нее json.dumps (сделать json из строки) и записываем её в файл в этом формате.

Давайте дернем ручку /add так же как раньше:

готовые скрипты для системного администратора

Что мы получаем в консоли ( обратите внимание на доп. информацию которую мы выводим с помощью функции print):

Что записывается в файл data.txt:

Дернем ручку еще раз, уже с другими данными, смотрим в файл:

Дернем ручку /get, увидим что она вернет нам информацию по user_id:

готовые скрипты для системного администратора

Есть так же ручка /list которая отдаст нам все что есть в файле data.txt:

готовые скрипты для системного администратора

А теперь дернем ручку /remove и увидим что в data.txt у нас эта строчка пропадет:

готовые скрипты для системного администратора

И действительно, попросив информацию по пользователю с user_id = 1 мы получим false:

готовые скрипты для системного администратора

По факту получается, что, каждый раз, мы удаляем и пересохраняем целый файл, и, пока он маленький — так делать можно. Но количество записей в файле будет расти и операция удаления записи будет занимать все более продолжительное время.

Поэтому, в production среде лучше использовать полноценную базу данных в которой решены подобные вопросы. Если говорить про простые, файловые базы то можно, например, взять sqlite (модуль sqlite3 в python). Её можно использовать если нагрузка на сервис будет относительно невысока.

Для более серьезных проектов можно использовать mysql или, что мне нравится больше — mongodb (как и когда какую базу лучше использовать — возможно, поговорим в следующих частях статьи).

4. Делаем frontend

готовые скрипты для системного администратора

Итак, мы сделали backend который пишет в файл то, что мы ему послали. И умеет отдавать то, что мы записали и может удалять элементы по user_id.

Теперь хочется красиво отобразить это на страничке таким образом, чтобы добавлять и удалять записи можно было без обновления этой самой странички. Будем использовать ajax.

4.1 Настраиваем отдачу html и статики

И посмотрим как она отображается в браузере:

готовые скрипты для системного администратора

А в консоли видим что кто-то действительно пришел и попросил нашу страничку:

На самом деле для подобных вещей, конечно, лучше использовать специализированное решение — вебсервер. Например, nginx — отлично справляется с отдачей статики.

Но настройка вебсервера выходит за рамки данной статьи :).

4.2. Подключение bootstrap и jquery
4.3 Нарисуем простую таблицу с применением стилей из bootstrap.

Обратите внимание — строка про подключение jquery должна идти строго до строки про bootstrap. И до всего кода который мы потом будем писать на js — если мы в нем планируем использовать jquery.
Так же обратите внимание на стили CSS, подключенные к таблице ( table-hover» ), их мы взяли из bootstrap.css, конкретно таблицу взяли вот отсюда: getbootstrap.com/css/#tables-hover-rows.

Итого, получаем в браузере вот такую таблицу:

готовые скрипты для системного администратора

4.4. Загрузим информацию с api и отобразим её в консоли

Для начала – выведем в консоль информацию полученную по api. Здесь мы впервые поговорим про firebug.

Чтобы было удобнее — я переместил ручки которые работают с данными на url /server/. И теперь к ручке list мы будем получать доступ по url 192.168.1.1/server/list.

Соответственно, мы должны поменять параметр для декоратора @app_test.route – добавив к нему слово /server. Для метода /list, например, код будет выглядеть так:

А теперь напишем Js который выгрузит данные с ручки /list и выведет их в консоль firebug.

готовые скрипты для системного администратора

С помощью расширения firebug (его можно поставить как дополнение в Firefox) мы можем посмотреть информацию в консоли js (можно так же воспользоваться стандартными средствами браузера).

готовые скрипты для системного администратора

В данном случае – мы удаляем “1” под полем UserId:

готовые скрипты для системного администратора

4.5 Отобразим загруженную информацию в таблице

Мы взяли данные из ручки /list и кроме того что вывели их на консоль – вызвали функцию handle_answer которой передали эти данные. Данная функция приняла данные, сделала из них список в каждом элементе которого находится одна строчка из файла – а разделителем для нас стал символ переноса строки \n.

Далее мы сделали перебор всех строк из списка. Каждую из которых мы превратили в Json – объект с помощью JSON.parse (мы можем это сделать, так как, технически, строка которую мы получили написана именно в Json формате ). Далее мы из этого json объекта, по методу который совпадает с именем поля, достали данные которые хранятся в этом поле (например – entry_jsoned.user_id – для первой строки в нашем файле будет равно “2” ) и сгенерировали на их основе html в конструкции вида:

В данном случае – это просто строка в которую мы проинжектировали в нужные места переменные полученные из Json объекта.

Что же получилось у нас в браузере:

готовые скрипты для системного администратора

Мы видим, что с помощью javascript мы “дорисовали” таблицу вставив в нее еще два tr-элемента с информацией которую мы получили из ручки /server/list. Отлично.

4.6 Отправим данные на сервер не перегружая страницу

Теперь, давайте добавим кнопку которая будет, например, добавлять, пользователей в нашу мини-базу данных. Для этого воспользуемся элементом horizontal form все того же bootsrap’a ( getbootstrap.com/css/#forms-horizontal ) только немного его поправим (например, возьмем другую кнопку и сделаем отступ между элементами).
А для добавления пользователей мы будем использовать ручку /add.

готовые скрипты для системного администратора

Теперь мы можем добавлять пользователей и данные по ним просто нажимая кнопку.

5. Заключение

Мы написали frontend + backend. Поговорили об общих принципах работы схемы, научились отлаживать js код и коснулись вопросов использования современных инструментов (flask, bootstrap и jquery) в нашей реализации сервиса. Backend помогает нам получить данные из любого источника, отдать их frontend’у в виде ручек, а стили мы подгружаем из bootstrap на сайте которого есть масса примеров.

В следующих частях мы настроим выгрузку данных из netflow в этот сервис для сбора и отображения трафика. А потом, прикрутим наш сервис к базе данных mongo и обеспечим ему отказоустойчивость.

Попробуем настроить Nginx и обоснуем, зачем нужно это делать. Также поговорим про модальные окна и попробуем кастомизировать css bootstrap и используем шаблонизаторы.

Источник

19 полезных shell-скриптов на все случаи жизни

готовые скрипты для системного администратора

Содержание статьи

Командная строка и те невообразимые вещи, которые с ее помощью можно творить, — визитная карточка UNIX и всех ее наследников. А где есть командная строка, там есть скрипты. И сегодня. нет, мы не будем учиться писать скрипты, мы рассмотрим наиболее полезные из них, те, что ты сможешь применять ежедневно для решения самого разного круга задач, начиная от сводки погоды и веб-сервера в одну строку и заканчивая ботом для твиттера в десять строк и скриптом для автоматического запуска любого торрент-клиента.

Сразу оговорюсь, что я вовсе не приверженец шаманизма и ни в коем случае не призываю тебя сидеть в зелено-черной консоли и набирать кучу букв, чтобы выполнить действия, для которых в графическом интерфейсе достаточно навести мышку на нужный элемент. Однако я убежден, что для решения многих задач консоль и скрипты годятся гораздо лучше графического интерфейса и поэтому пренебрегать ими никак нельзя. Тем более что любая DE позволяет создать для скрипта иконку, так что для его запуска даже не надо будет открывать консоль.

Простые примеры

Итак, не разглагольствуя понапрасну, сразу перейдем к примерам:

Эта простая команда покажет тебе внешний IP — идеальный вариант, если в Сеть ты ходишь через роутер. Все, что она делает, — просто обращается к серверу ifconfig.co, который возвращает обратно IP-шник одной строкой вместо полноценной веб-страницы.

И да, это вовсе не скрипт, это просто команда, но, чтобы превратить команду в скрипт, достаточно поместить ее в текстовый файл и первой строкой добавить так называемый шебанг, то есть символы #!, за которыми следует имя командного интерпретатора:

Далее скрипт сохраняем в каталог

/bin и назначаем права на исполнение:

Теперь его можно вызывать из командной строки командой myip.sh.

Этот скрипт позволяет получить сводку погоды на четыре дня. Принцип тут такой же, как в случае с ifconfig.co.

готовые скрипты для системного администратора Сводка погоды в консоли

Xakep #212. Секреты даркнета

А так можно получить краткое описание чего-либо в Википедии, причем с помощью DNS-запроса вместо обращения к веб-серверу. Кстати, веб-сервер через командную строку тоже очень легко создать:

Данный скрипт основан на утилите netcat (nc), которую называют швейцарским армейским ножом для сетевых операций. Скрипт запускает цикл, выполняющий команду nc, которая слушает 80-й порт и в ответ на запрос отдает file.html, отправляя переданный запрос в никуда (символ означает noop, то есть пустую операцию).

С помощью простых скриптов и команд можно запросто слушать интернет-радио:

Естественно, плей-лист в формате M3U необходимо заранее скачать с сайта радиостанции. Кстати, если запустить MPlayer с аргументом —input-ipc-server=/tmp/mpvsocket, им можно будет управлять, записывая команды в файл. Например, настроить громкость:

Создай два скрипта: один для запуска, другой для остановки радио (со строкой killall mpv), повесь их на рабочий стол и настрой горячие клавиши DE на управление воспроизведением. Вуаля, у тебя готов плеер для интернет-радио, запустить который можно, просто кликнув по иконке на рабочем столе. И он почти не будет расходовать память или занимать трей.

Но отвлечемся от сетевых операций и вернемся к локальным делам.

А это уже скрипт, который запускает команду в ответ на изменение файлов в каталоге. Ее можно использовать для множества разных целей, например для автоматического включения плеера при сохранении MP3-файла. Или просто выводить уведомление на десктоп, используя в качестве команды notify-send:

Десктоп

Раз уж мы заговорили о десктопе, то продолжим. Как и консоль, его тоже можно заскриптовать. Вот, например, скрипт, загружающий случайные обои, опубликованные на reddit-канале wallpaper:

Здесь все просто. С помощью wget скрипт загружает страницу www.reddit.com/r/wallpaper, передает ее grep, который ищет на ней ссылки на imgur, выбирает случайную ссылку с помощью shuf, загружает ее опять же с помощью wget и устанавливает в качестве обоев, используя команду feh (это такой миниатюрный просмотрщик изображений, его нужно предварительно установить). Скрипт можно добавить на рабочий стол, и тогда по клику у тебя будут меняться обои.

А это скрипт для включения/выключения тачпада ноутбука: включает, если отключен, и наоборот. В своей работе использует утилиту synclient, позволяющую управлять тачпадами производства Synaptics (90% тачпадов делают они). При запуске без аргументов утилита выводит различную информацию о тачпаде, в том числе строку TouchpadOff = 1, если он активирован, и TouchpadOff = 2, если отключен. Скрипт находит это значение и в зависимости от состояния тачпада включает или отключает его.

Ту же самую команду можно использовать для создания полноценной камеры слежения, которая делает снимки в моменты, когда юзер прикасается к мыши:

Для записи полноценного видео с веб-камеры можно использовать такой скрипт:

В результате ты получишь video.avi в формате MPEG4 с битрейтом 1800 и аудиодорожкой в формате MP3 с битрейтом 128.

А так ты можешь записать скринкаст. 1366×768 — разрешение рабочего стола. Просто сделать скриншот отдельного окна всегда можно с помощью команды import:

После ее запуска значок мыши изменится на «прицел», с помощью которого можно выбрать окно. Повесив эту команду на клавиатурную комбинацию, ты получишь практически идеальную систему снятия скриншотов, абсолютно не жрущую память, как это делают специализированные приложения, постоянно висящие в трее.

Подключить и настроить внешний монитор тоже можно из командной строки:

Данный скрипт предполагает, что основной монитор носит имя LVDS, а внешний — VGA-0. Это стандартная ситуация для ноутбуков; если ты не уверен, можешь проверить вывод команды xrandr: при передаче скрипту аргумента off он отключает внешний монитор, аргумент on, в свою очередь, включает его, располагая по левую сторону от основного (аргумент —left-of LVDS в первой команде). Далее скрипт добавляет новую конфигурацию для монитора с разрешением 1920 x 1080 и активирует его. В самом конце скрипт устанавливает дефолтное значение DPI — как показывает практика, при подключении монитора с другим разрешением оно часто слетает.

Он же поможет сгенерировать нестандартное разрешение, «не поддерживаемое» монитором по умолчанию.

Google, Twitter, Dropbox и торренты

Отвлечемся от десктопных дел и поговорим о сетевых сервисах. Начнем, разумеется, с Google. Вот так будет выглядеть скрипт для получения первых десяти результатов поиска:

Скрипт делает запрос к Google с помощью уже знакомого нам curl, заменяя пробелы в поисковой строке на плюсы. Далее выискивает в ответном HTML ссылки и выводит их на экран. Все просто, хоть и кажется сложным.

готовые скрипты для системного администратора Ищем в Google из командной строки

Второй популярный сервис — YouTube:

Здесь все совсем просто. Скрипт всего лишь проигрывает видео с указанным в аргументе ID с помощью плеера mpv. Естественно, youtube-dl придется установить заранее.

Как насчет твиттера? Нет проблем, вот полноценный бот, который на входе принимает команду, выполняет ее с помощью командного интерпретатора и отправляет результат указанному юзеру.

Скрипт использует консольный клиент ttytter, читая в цикле последнее direct message, далее он проверяет, не была ли такая команда уже выполнена, и, если нет, выполняет ее и отправляет указанному в переменной USER пользователю, попутно обрезая до 140 символов.

Чтобы все заработало как надо, тебе придется установить ttytter, запустить его, ввести приведенную им ссылку в адресную строку браузера, скопировать показанный браузером ключ аутентификации и ввести его в ttytter. Естественно, перед тем как это сделать, следует завести для бота отдельного юзера и залогиниться под его учеткой.

готовые скрипты для системного администратора Ttytter запрашивает ключ

Твиттер можно использовать не только для выполнения команд, но и для мониторинга машины. Следующий скрипт отправляет в ленту сообщение с информацией о состоянии машины (имя хоста, uptime, нагрузка, свободная память и нагрузка на CPU):

готовые скрипты для системного администратора Мониторинг машины с помощью Twitter

Ну и под конец приведу скрипт, не связанный с сетевыми сервисами, но имеющий прямое отношение к сетям и к тому, зачем мы обычно их используем. Это скрипт для запуска и остановки торрент-клиента во время простоя машины:

Скрипт уходит в бесконечный цикл, каждую минуту проверяя, сколько миллисекунд прошло с момента, когда юзер что-либо делал (для этого используется команда xprintidle). Если прошло уже 600 000 мс (десять минут), скрипт выполняет команду, указанную в переменной STARTCMD. В противном случае он выполнит команду STOPCMD, но только тогда, когда до нее была выполнена команда STARTCMD. Если кратко: ничего не делаешь за компом десять минут — запускается STARTCMD, в данном случае это команда запуска всех закачек с помощью Transmission, если нет — приостановка всех закачек. Не любишь Transmission? Нет проблем, вот команды для Deluge:

Вместо выводов

Не удивлюсь, если все описанное в статье покажется тебе очередным велосипедостроением, и даже соглашусь с таким мнением. Все-таки современный Linux — это не та система для сумасшедших экспериментаторов, какой она была пятнадцать лет назад. Сегодня для каждой задачи можно найти отдельный, отлаженный и хорошо работающий инструмент, в том числе графический. Другое дело, что не совсем понятно, стоит ли захламлять систему тяжеловесными написанными на Python приложениями с кучей зависимостей, когда ту же задачу легко решить с помощью простенького скрипта.

Каким путем пойти — выбирать тебе. Встанешь ли ты на темную сторону или выберешь путь джедая?

готовые скрипты для системного администратора

Евгений Зобнин

Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *