Форум сайта python.su
Доброго времени! Ниже скрипт проверки существования пользователя на серверах, айпишники которых берутся из файла hosts.
Как можно оптимизировать скрипт чтобы он выдавал только те айпи адреса на которых есть искомый пользователь?
#!/usr/bin/python
## IMPORT MODULS SECTION
from paramiko import SSHClient
from paramiko import AutoAddPolicy
import sys, time
from threading import Thread
import paramiko
######################################################################
client = paramiko.SSHClient()
client.load_system_host_keys()
f_open = open("hosts", 'r')
ssh = SSHClient()
client.set_missing_host_key_policy(AutoAddPolicy())
user = 'user'
pwd = 'password'
usr = raw_input("input username to watch: ")
cmd = "grep %s /etc/passwd" % usr
for line in f_open:
ip = line.rstrip()
client.connect(ip, username=user, password=pwd)
time.sleep(1)
i, o, e = client.exec_command(cmd)
print "#######################################################"
print 'monitoring ip is: %s searching user is: %s' % (ip, usr)
print ""
paramiko.util.log_to_file('param.log')
print ""
print o.read()
print ""
print e.read()
print ""
print "#######################################################"
client.close()
sys.exit()
Отредактировано (Янв. 12, 2011 18:28:31)
Офлайн
Потому, что у вас в цикле только три строчки
for line in f_open:
ip = line.rstrip()
print ip
client.connect(ip, username=user, password=pwd)
Офлайн
PooHОгромное за помощь! Не сомневайтесь, читаем помаленьку Ж), чтоб не плодить тем, подправил основное сообщение, может и с этим поможете?
Потому, что у вас в цикле только три строчкивсе остальное вне цикла. ОТСТУПЫ ЗНАЧИМЫ!!!for line in f_open:
ip = line.rstrip()
print ip
client.connect(ip, username=user, password=pwd)
скрипты лучше писать не путем длительного гугления, а путем чтения документации.
ЗЫ: а я для таких вещей пользую fabric, построен поверх paramiko и гораздо удобнее.
Офлайн
Ну как-то так:
s = o.read()
if s:
print s #ну и все остальное тут печатать
Отредактировано (Янв. 12, 2011 18:57:23)
Офлайн
Спасибо, очень помогли! Может подскажете еще возможно ли написать подобный код для проверки существования Windows пользователей на Win серверах. В какую сторону копать?
Офлайн
belodemonсмотрите win32api (из пакета pywin32)
Спасибо, очень помогли! Может подскажете еще возможно ли написать подобный код для проверки существования Windows пользователей на Win серверах. В какую сторону копать?
Офлайн
А как записать вывод внешней команды в файл?
for line2 in f_open2:
ip2 = line2.rstrip()
print ip2
cmd_win = "/usr/bin/winexe -U user%%pass \/\/%s \'net user\'" % ip2
print cmd_win
os.system(cmd_win)
sys.stdout = file('out_log', "w")
Отредактировано (Янв. 14, 2011 18:49:08)
Офлайн
igor.kaistКод пишу на Linux, модулей не нашел, нашел только внешнюю программу winexe, работает подобно pstools для Windows.belodemonсмотрите win32api (из пакета pywin32)
Спасибо, очень помогли! Может подскажете еще возможно ли написать подобный код для проверки существования Windows пользователей на Win серверах. В какую сторону копать?
Офлайн
Офлайн
http://docs.python.org/library/subprocess.htmlСпасибо, жаль только в стандартном наборе модулей у версии 2.3 под RHEL 4.5(update) нет почему то модуля subprocess, уже добавил paramiko еще и subprocess придется прикручивать…
Офлайн