uscr 14.04.2012 11:34
Скрипты — Велосипед для автологина на активное сетевое оборудование.
Здравствуйте
Статья короткая от того, что ничего сложного в ней нет. Это - мой способ избавления себя от рутинного вбивания пары логин/пароль при логине на свитч. А если нужно проследить всю цепочку свитчей до серверной (9 свитчей, в среднем), а делается это не 1 и даже не 31 раз за день, то пальцы начинают плакать. Поэтому, под катом пара скриптов и небольшое пояснение по настройке и использованию.
Сам пост:
Сначала скрипты, которые осуществят задуманное. Их нужно положить в один каталог (можно разнести по разным, но это потребует переписывания bash скрипта, что сделать совсем не сложно).
bash скрипт firefox_telneting:
#!/bin/bash
addr=`echo $1 | cut -d / -f 3 | tr ":" " "`
gnome-terminal --tab -t $addr -e "`dirname $0`/i_telneter.py $addr"
python скрипт i_telneter.py (Скрипт отображается неверно. Я постил багу, но
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pexpect
import keyring
import os
from sys import argv
tmt = 3
models=['D-Link', 'Cisco', 'UserName', 'Username']
synonims = [[2, 0], [3, 1]]
username = 'username'
ip = argv[1]
def notify(title = 'OLOLO', message = 'trololo', pic = '/usr/share/pixmaps/gnome-color-browser.png'):
os.system("notify-send \"%s\" \"%s\" -i %s" % (title, message, pic))
def auth(tlnt, model, username, ip):
password = keyring.get_password(model, username)
try:
tlnt.expect(['Username:', 'login','UserName'], timeout=tmt)
except pexpect.TIMEOUT:
notify("Обломался автологин на %s" % ip, "Всё в твоих руках.", '/usr/share/pixmaps/faces/coffee.jpg')
tlnt.interact()
tlnt.sendline(username)
tlnt.expect(['Password:','PassWord'])
tlnt.sendline(password)
notify("Автологин на %s" % ip, "Это %s, а ты - %s" % (model, username), '/usr/share/pixmaps/faces/puppy.jpg')
tlnt.interact()
notify("Закрылось соединение на %s" % ip, "Волнует ли тебя это?", '/usr/share/pixmaps/faces/coffee.jpg')
tlnt = pexpect.spawn('telnet %s' % ip)
i = tlnt.expect(models)
for j in synonims:
if i == j[0]:
i = j[1]
break
try:
auth(tlnt, models[i], username, ip)
except pexpect.EOF:
pass
Для работы питонячьего скрипта понадобится установить модули pexpect и keyring (хотя в убунте, например, keyring уже стоит).
Bash скрипт трогать не нужно. Поскольку пароли я предлагаю хранить на брелке gnome-keyring), то с питоном стоит поступить так: зайти в интерактивную консольку питона (для этого просто набрать в консоли: python), импортировать модуль для доступа к брелку (для этого набрать в консоли уже питона: import keyring) и вбить пароли по одному (keyring.set_password('name', 'username', 'password')). В качестве name нужно использовать некоторые идентификаторы. У меня это — D-Link и Cisco. Всё остальное объявляется синонимами.
Синонимы работают так: в переменной models указывается список идентификаторов, к которым привязаны пароли на брелке и строки, по которым expect будет определять, на что мы логинимся. Например, строка запроса имени пользователя будет отличаться для циски и длинка. Для других вендоров тоже можно найти свои особенности. Главное теперь, правильно настроить синонимы. Они указываются вложенными списками в списке synonims по следующему принципу: [номер синонима, номер идентификатора]. Под номером подразумевается порядковый номер в списке models (python считает с нуля, помни об этом, дружок).
Пример:
models = [ длинк, циска, синоним_длинк1, синоним_длинк2, синоним_циска ]
synonims = [ [2,0], [3,0], [4,1] ]
Скрипт активно сообщает о каждом своём чихе с помощью всплывающих уведомлений, а именно — используя программу notify-send, так что нужно не забыть установить её. На этом всё. Далее милые бонусы.
Бонусы
Открытие telnet ссылок в firefox.
В адресной строке пишем: about:config. Мы в конфигураторе.
Кликаем правой клавишей на таблице значений -> New -> Boolean
Создаём запись «network.protocol-handler.expose.telnet = false» и закрываем конфигуратор.
Теперь кликаем на любую telnet ссылку.
Браузер спросит: «чем открыть, хозяин?». Вот тут то вы ему и покажете на скрипт firefox-telneting.
Теперь работает.
Открытие telnet ссылок в google crome.
Тут всё сложнее и проще сразу. Хром самый умный. Он знает, что в линуксе за открытие всего и вся отвечает скрипт /usr/bin/xdg-open. Через него и предлагает он открывать незнакомые ссылки. Всё было бы хорошо, но: xdg-open срать хотел на telnet:// ссылки, а даже если бы и знал о сущесвовании их, то всё равно всё испортил бы, потому, что нам нужен автологин, а не простая консолька с телнетом. Поэтому нужно открыть текстовым редактором /usr/bin/xdg-open и в нужную функцию (они зависят от DE, для гнома - open_gnome) добавьте строки:
1 |
|
Теперь совсем всё.
Sergey Vlasenko 14.04.2012 11:43 #
+ 0 -
при логине на свитч
я так понимаю это все же маршрутизаторы
И маршрутизаторы тоже. В основной массе, всё таки свитчи. DES-3526, например.
Вроде скрипт питоновский, а не вижу не одного отступа, так и должно быть?
P.S.: свои предыдущие сообщения изменять нельзя?
P.S.: свои предыдущие сообщения изменять нельзя?