Zabbix рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдиреАрдп ssh / telnet / vnc рдХреНрд▓рд╛рдЗрдВрдЯ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ

рдХрдИ рд░реИрдХ, рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рд╕рд░реНрд╡рд░, рд░рд╛рдЙрдЯрд░, рд╕реНрд╡рд┐рдЪ рдФрд░ рдЕрдиреНрдп kvm'ami рдХреЗ рд╕рд╛рде рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рд╣рдореЗрдВ рдЗрд╕ рд╕рднреА рд╡реНрдпрд╡рд╕рд╛рдп рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд▓реНрджреА рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░
рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╕рд╣реА рд╣реИ рдХрд┐ рдорд╛рдЙрд╕ рдХреЗ рдХреБрдЫ рдЬреЛрдбрд╝реЗ рдФрд░ рд╕реЗрд╢рди - рд╡рд╛рдВрдЫрд┐рдд рд╕реНрд╡рд┐рдЪ рдХреЗ рдХрдВрд╕реЛрд▓ рдХреЗ рд╕рд╛рдордиреЗред

рд╣рдорд╛рд░реЗ рд╡рд╛рд░реНрдбреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП, рд╣рдо Zabbix рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рддреЛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЕрджреНрднреБрдд рдЙрдкрдХрд░рдг рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВред
рдЖрдЦрд┐рд░рдХрд╛рд░, рдЬрд╝реИрдмрд┐рдХреНрд╕ рдХрд╛рд░реНрдб рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд░реИрдХ рдкрд░ рдкреНрд░рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛, рдЗрд╕рдХреЗ рд╕рдмрдХрд╛рд░реНрдб рдкрд░ рдЬрд╛рдПрдВ рдФрд░, рд▓реЛрд╣реЗ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЪреБрдиреЗрдВ,
рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╕реНрдерд╛рдиреАрдп ssh / telnet / vnc рдХреНрд▓рд╛рдЗрдВрдЯ рдЪрд▓рд╛рдПрдВред

рд╡рд┐рдЪрд╛рд░ рд╕реЗ рд╣реИрд░рд╛рди, рдореИрдВрдиреЗ рдЦреЛрдЬ рдЗрдВрдЬрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдЦреЛрдЬрдиреЗ рдХреА рдЙрдореНрдореАрдж рдореЗрдВ рдкреАрдбрд╝рд╛ рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред
рдпрд╣ рдзрд╛рдЧрд╛ рдЬрд╝реИрдмрд┐рдХреНрд╕ рдлреЛрд░рдо рдкрд░ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЕрдкрдиреА рдорд╢реАрди рдкрд░ рд╕реНрдерд╛рдиреАрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП, рд╡рд░реНрд▓реНрдб рд╡рд╛рдЗрдб рд╡реЗрдм рдХреЗ рдиреБрдХреНрдХрдбрд╝ рдкрд░ рдШреВрдордиреЗ рдФрд░ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╕рд╡рд╛рд▓реЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдкреАрдбрд╝рд╛ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдпрд╛рдж рдЖрдпрд╛ ... рдкрд╛рдпрдердиред
рд╣рд╛рдБ, рдЕрдЬрдЧрд░ рдЬреЛ рдореБрд╢реНрдХрд┐рд▓ рд╕рдордп рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрдпрд╛ред
рдореБрдЭреЗ рдЗрд╕ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рд╕рд░рд▓рддрд╛ рдФрд░ рд╕реБрдЦрдж рдЧрд░реНрдо рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреЛрдорд▓ рднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВред

рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдорд▓рд╛ рд╡реЗрдХреНрдЯрд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЦреЛрдЬ рдЗрдВрдЬрди рд╡рд┐рдЪрд╛рд░ рдкреИрдЯрд░реНрди рдХреЗ рдПрдХ рдирдП рд╕реНрдЯрдлрд┐рдВрдЧ рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ рдЬрдо рдЧрдП ...
рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдмрд╛рдд рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдкрддрд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реВрдВрдЧрд╛ - рдореИрдВ рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦреВрдВрдЧрд╛!
рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░, рд╕рд░реНрд╡рд░ рднрд╛рдЧ рдХрдорд╛рдВрдб рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛, рдФрд░ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдкрд░, рдЬрдм рдореИрдВ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдХрдорд╛рдВрдб рднреЗрдЬ рджреЗрдЧрд╛ред

рд╢реЛрдз рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдерд╛ рдЬреЛ рд▓рд┐рдирдХреНрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рджреЛрдиреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдкреЛрд╖рд┐рдд рд▓рдХреНрд╖реНрдп рдХреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рдХрд╛ рдорд╣рд╛рдХрд╛рд╡реНрдп рдЖрдкрдХреЛ рд╣реИрдмрд░рдХрдЯ рдХреЗ рдиреАрдЪреЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред


рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рдпрд╛рддреНрд░рд╛ рдХреА рд╢реБрд░реБрдЖрддред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд▓рд┐рдЦрд┐рдд рдХрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг 2.7 рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реИред
рдФрд░ рдЬрд╝реИрдмрд┐рдХреНрд╕ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рддреАрди рдЪрд░рдгреЛрдВ рдореЗрдВ рдЧрд┐рдирд╛ рдЧрдпрд╛ - Zabbix 2.2.2
рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рд╕реЙрдХреЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред
рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрд░реЛрдд рдореЗрд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдереЗ:
1. www.binarytides.com/python-socket-programming-tutorial
2. www.binarytides.com/code-chat-application-server-client-sockets-python
3. java-developer.livejournal.com/6920.html

рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рдкреНрдд рдЦреЗрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рднрд╡рд┐рд╖реНрдп рдХреЗ рдЖрд╡реЗрджрди рдХрд╛ рдЖрдзрд╛рд░ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдЧреНрд░рд╛рд╣рдХ:
 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket sock = socket.socket() sock.connect(('localhost', 9090)) sock.send('/usr/bin/konsole -e mc') sock.close() 

рдФрд░ рд╕рд░реНрд╡рд░:
 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import subprocess sock = socket.socket() sock.bind(('localhost', 9090)) sock.listen(1) while True: conn, addr = sock.accept() data = conn.recv(1024) if not data: break subprocess.call(data, shell=True) conn.close() 

рд▓реВрдкрдмреИрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдкреЛрд░реНрдЯ 9090 рдкрд░ рдЪрд▓ рд░рд╣реЗ рд╕рд░реНрд╡рд░ "рд╕реБрдирддрд╛ рд╣реИ", рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рдирдпрд╛ рдХрдВрд╕реЛрд▓ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб рднреЗрдЬрддреЗ рд╣реИрдВ, рдФрд░ -e mc рдкреИрд░рд╛рдореАрдЯрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдордзреНрдпрд░рд╛рддреНрд░рд┐ рдХрдорд╛рдВрдбрд░ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреНрд░рджрд░реНрд╢рди


* рд▓рд┐рдирдХреНрд╕ рдореЗрд░реЗ рд▓рд┐рдП рдореБрдЦреНрдп рдУрдПрд╕ рд╣реИ, рдФрд░ рдХреЗрдбреАрдИ рдбреАрдИ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рди рдХрд░реЗрдВ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдУрдПрд╕ рд╕реЗ рдмрдВрдзрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдиреАрдВрд╡ рд░рдЦреА рдЬрд╛рддреА рд╣реИ, рдЖрдЧреЗ рдмрдврд╝реЗрдВ!

рдЕрдзреНрдпрд╛рдп 1


рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ, рдЧреНрд░рд╛рд╣рдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рд╕реАрдЦреЗрдВрдЧреЗ рдФрд░ рд╣рдо Zabbix рдХрд╛рд░реНрдб рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЛ рдкрд╣рд▓рд╛ рдХрдорд╛рдВрдб рднреЗрдЬреЗрдВрдЧреЗред

рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдХреЛрдб рдореЗрдВ рдЕрднреА рддрдХ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдореЗрдВ sys рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЗрдВрдкреЛрд░реНрдЯ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред
 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import sys sock = socket.socket() sock.connect(('localhost', 9090)) sock.send('/usr/bin/konsole -e ssh root@'+ sys.argv[1]) sock.close() 

рд╕рд░реНрд╡рд░ рдХреЛ рдХрдВрд╕реЛрд▓ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рджрд┐рдП рдЧрдП рдкрд╣рд▓реЗ рддрд░реНрдХ рд╕реЗ рдЖрдИрдкреА рдХреЗ рд▓рд┐рдП рдПрдХ ssh рдХрдиреЗрдХреНрд╢рди рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд▓реЙрдЧрд┐рди root ред

рдФрд░ рдЕрдм рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдкрд░ рдбрд╛рд▓рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрд╕реЗ рдпрд╣рд╛рдБ рдЖрд░рд╛рдо рдорд┐рд▓рд╛ - /usr/local/bin/client.py
рдЬрд╝реИрдмрд┐рдХреНрд╕ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ, рдкреНрд░рд╢рд╛рд╕рди -> рд▓рд┐рдкрд┐рдпреЛрдВ рдкрд░ рдЬрд╛рдПрдВред

рдПрдХ рдирдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ (рдирдпрд╛ рдмрдирд╛рдПрдБ)ред

Zabbix рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, {HOST.IP} рдореИрдХреНрд░реЛ рдХреЛ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ IP рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдЬрд╛рддреЗ рд╣реБрдП, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЗ рдкрд╛рд╕ рдирд╡ рдирд┐рд░реНрдорд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдореЗрдиреВ рд╣реИред

рдХрдИ рд╕рд╣реА рдиреЛрдЯрд┐рд╕ - "рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрднреА рднреА рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рд╕реЗ рдЬреБрдбрд╝реА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд░реНрд╡рд░ рдкрд░ рд╣реИ?"
рдпрд╣ рд╕рд╣реА рд╣реИ! рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдЗрдВрдЯрд░реЗрдХреНрд╢рди рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП ssh рд╕реБрд░рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╕рднреА рдХрдиреЗрдХреНрд╢рди: 9090 Zabbix рд╕рд░реНрд╡рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реЗ рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рдПрдХ рд╕рд░реНрд╡рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЗрд╕ "рдорд┐рд░рд░рд┐рдВрдЧ" рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛
 ssh -f -N -R 9090:127.0.0.1:9090 zabbix 

рдЙрдкрд░реЛрдХреНрдд рдЧреЛрдкрдиреАрдпрддрд╛ рдореЗрдВ ssh рдФрд░ рд╕реБрд░рдВрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА, рд╣реИрдмрд░ - 1 , 2 рдХреЗ рдЕрджреНрднреБрдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ
рдкрд╣рд▓реЗ рдЕрдзреНрдпрд╛рдп рдХреЗ рд▓рд┐рдП рд╡реАрдбрд┐рдпреЛ рдЪрд┐рддреНрд░рдг



рдЕрдзреНрдпрд╛рдп реи


рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ, рд▓рд┐рдкрд┐рдпрд╛рдБ рдереЛрдбрд╝реА рд╕реНрдорд╛рд░реНрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рд╕реАрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд▓рд┐рдирдХреНрд╕ рд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рдХреЛ рдХреИрд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдХреЛрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд┐рд╕реА рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдУрдПрд╕ рдЪрд▓ рд░рд╣рд╛ рд╣реИред
рдФрд░, рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рд╣реА рдЖрджреЗрд╢ рджрд┐рдпрд╛ред
рджреЛрдиреЛрдВ рд▓рд┐рдкрд┐рдпреЛрдВ рдХрд╛ рдХреЛрдб рдмрджрд▓ рдЧрдпрд╛ рд╣реИред

рдЧреНрд░рд╛рд╣рдХ:
 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import sys sock = socket.socket() sock.connect(('localhost', 9090)) os = sock.recv(64) if os == "Windows": sock.send('C:\\apps\\putty.exe -ssh root@' + sys.argv[1]) elif os == "Linux": sock.send('/usr/bin/konsole -e ssh root@'+ sys.argv[1]) sock.close() 

рд╕рд░реНрд╡рд░:
 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import subprocess OS = "Linux" sock = socket.socket() sock.bind(('127.0.0.1', 9090)) sock.listen(1) while True: conn, addr = sock.accept() conn.sendall(OS) data = conn.recv(1024) print data if not data: break subprocess.call(data, shell=True) conn.close() 

* рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП, рдУрдПрд╕ рдЪрд░ рдХреЛ рддрджрдиреБрд╕рд╛рд░ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд╣рд▓реЗ рдУрдПрд╕ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдХрдорд╛рдВрдб рднреЗрдЬрддрд╛ рд╣реИред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддреЛрдВ рдореЗрдВ рдмреИрдХрд╕реНрд▓реИрд╢ рд╕реЗ рдмрдЪ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд рдбрдмрд▓ рд╕реЗрдЯ рдХрд░реЗрдВ \\

рджреВрд╕рд░реЗ рдЕрдзреНрдпрд╛рдп рдХреЗ рд▓рд┐рдП рд╡реАрдбрд┐рдпреЛ

рд╡реАрдбрд┐рдпреЛ рдореЗрдВ:
рдкреЛрдЯреАрди рдЪрд▓рд╛рдХрд░ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдкреЛрд░реНрдЯ рдХреЛ "рдорд┐рд░рд░" рдХрд░реЗрдВ
рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░реЗрдВ
рд╣реЛрд╕реНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд╕рдм рдХреБрдЫ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдкрд░ рднреА рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВ


рдЕрдзреНрдпрд╛рдп 3


рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ, рд╣рдо Zabbix рдлреНрд░рдВрдЯреЗрдВрдб рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдореЛрдбрд╝ рджреЗрдВрдЧреЗред
рд╣рдо рдЙрд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдЦрд╛рдПрдВрдЧреЗ рджреВрд╕рд░рд╛ рддрд░реНрдХ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рдкрд░ рдкрдВрдЬреАрдХреГрдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ / рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд▓реЙрдЧрд┐рдиред

рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЕрдм рдЖрдк рд╕рд░реНрд╡рд░, рд░рд╛рдЙрдЯрд░, рд╕реНрд╡рд┐рдЪ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ Zabbix рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢рд╛рд╕рдХ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ?
рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рд╣реИ, рдмрд╕ рдпрд╣ рдХрд╣ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд▓рд┐рдВрдХ "рдкреЛрдХреНрдб" рдХреМрди рдХрд░рддрд╛ рд╣реИред

рд╣рдо рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣рд▓ рдХрд░реЗрдВрдЧреЗред

рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ:
рдПрдбрдорд┐рди - 9090
рдПрдбрдорд┐рди 1 - 9091
рдЖрджрд┐

рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдЧреНрд░рд╛рд╣рдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб:
 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import sys if sys.argv[2] == 'Admin': PORT=9090 elif sys.argv[2] == 'Admin1': PORT=9091 sock = socket.socket() sock.connect(('localhost', PORT)) os = sock.recv(64) if os == "Windows": sock.send('C:\\apps\\putty.exe -ssh root@' + sys.argv[1]) elif os == "Linux": sock.send('/usr/bin/konsole -e ssh root@'+ sys.argv[1]) sock.close() 


рд▓реЗрдХрд┐рди рдкрд┐рдЫрд▓реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░, рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рдерд╛ред
рдореБрдЭреЗ рдЗрд╕ рдкрд╛рд░реА рдХреЗ рд▓рд┐рдП рдХреЙрдлреА рдХреА рд╕реАрдорд╛ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рдХрд░рдиреА рдкрдбрд╝реА рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдкрдиреА рдкрддреНрдиреА рдХреА рддрд░рдл рд╕реЗ рдПрдХ рдмрд┐рд▓реНрд▓реА рднреА рдЪреЛрд░реА рдХреАред
рдХреЙрдлреА рдкрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдмрд┐рд▓реНрд▓реА, рдЬреЛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдерд╛, рдЙрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдлреЗрдВрдХ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдорд╛рдзрд╛рди рдХреЗ рдХрд░реАрдм рдирд╣реАрдВ рдЖрдпрд╛ ...
рд▓реЗрдХрд┐рди рдЬрд╡рд╛рдм рдХреА рдирд┐рдХрдЯрддрд╛ рдХреА рднрд╛рд╡рдирд╛ рдиреЗ рдореБрдЭреЗ рдЖрд░рд╛рдо рдирд╣реАрдВ рджрд┐рдпрд╛, рдпрд╣ рдЕрдкрдиреЗ рдкрдВрдЬреЗ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ рдХрд╕рдХрд░ рдкрдХрдбрд╝ рд▓реЗрддрд╛ рдерд╛, рдФрд░ рдореБрдЭреЗ рдкрддрд╛ рдерд╛ рдХрд┐ рд╕реЗрдм рдореЗрд░реЗ рд╕рд┐рд░ рдкрд░ рдЧрд┐рд░рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛ред
рдФрд░ рдпрд╣ рдЧрд┐рд░ рдЧрдпрд╛! (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╢рд╛рдмреНрджрд┐рдХ рдЕрд░реНрде рдореЗрдВ рдирд╣реАрдВ)
рдХрд╛рдордХрд╛рдЬреА рд╕рдВрд╕реНрдХрд░рдг, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдХреНрд╕рд░ рд╣реЛрддрд╛ рд╣реИ, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рддрд╣ рдкрд░ рдерд╛ред
рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдмреБрд▓рд╛рдП рдЧрдП рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдерд╛рдкрд┐рдд Zabbix рдХреЗ рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╕реНрдерд┐рдд script_exec.php рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╡рд┐рд╡рд░рдг MySQL рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ script_exec.php рдХреЛ рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдЕрдкрдиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдЧрд┐рди рдкрд╛рд╕ рдХрд░ рдкрд╛рдПрдВрдЧреЗред
рд╕рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдХреЛрдб_exec.php:
 <?php /* ** Zabbix ** Copyright (C) 2001-2014 Zabbix SIA ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **/ require_once dirname(__FILE__).'/include/config.inc.php'; $page['title'] = _('Scripts'); $page['file'] = 'scripts_exec.php'; define('ZBX_PAGE_NO_MENU', 1); require_once dirname(__FILE__).'/include/page_header.php'; $NewCommand4Run = '/usr/local/bin/client_ssh.py {HOST.IP} '. CWebUser::$data['alias']; // VAR TYPE OPTIONAL FLAGS VALIDATION EXCEPTION $fields = array( 'hostid' => array(T_ZBX_INT, O_OPT, P_ACT, DB_ID, null), 'scriptid' => array(T_ZBX_INT, O_OPT, null, DB_ID, null) ); check_fields($fields); ob_flush(); flush(); $scriptId = getRequest('scriptid'); $hostId = getRequest('hostid'); $data = array( 'message' => '', 'info' => DBfetch(DBselect('SELECT s.name FROM scripts s WHERE s.scriptid='.zbx_dbstr($scriptId))) ); if ($scriptId == 5) { DBexecute('update zabbix.scripts set command='."'".$NewCommand4Run."'".' where scriptid=5;'); } $result = API::Script()->execute(array( 'hostid' => $hostId, 'scriptid' => $scriptId )); $isErrorExist = false; if (!$result) { $isErrorExist = true; } elseif ($result['response'] == 'failed') { error($result['value']); $isErrorExist = true; } else { $data['message'] = $result['value']; } if ($isErrorExist) { show_error_message( _('Cannot connect to the trapper port of zabbix server daemon, but it should be available to run the script.') ); } // render view $scriptView = new CView('general.script.execute', $data); $scriptView->render(); $scriptView->show(); require_once dirname(__FILE__).'/include/page_footer.php'; 


рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓
 $NewCommand4Run = '/usr/local/bin/client.py {HOST.IP} '. CWebUser::$data['alias']; 

рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ + рдореИрдХреНрд░реЛ {HOST.IP} + рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд▓реЙрдЧрд┐рди рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реЛрдЧрд╛ред
рдПрдХ рд╢рд░реНрдд
 if ($scriptId == 5) { DBexecute('update zabbix.scripts set command='."'".$NewCommand4Run."'".' where scriptid=5;'); } 

рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдХреЗ рд╕рд╛рде MySQL рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХрдорд╛рдВрдб рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:


рдФрд░ рдЕрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд░реНрд╡рд░ рдХреЛ рдХрдорд╛рдВрдб рдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред

рдФрд░ рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рдзреНрд╡рдирд┐ рдХреЗ рдмрд┐рдирд╛ рджреЗрдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реИрдкрдЯреЙрдк рдмрд╣реБрдд рдЙрдЧреНрд░ рдерд╛)


рдЕрдзреНрдпрд╛рдп 4


рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ, рд╣рдо Zbbix рдХреЛ vnc рдФрд░ telnet рдХреНрд▓рд╛рдЗрдВрдЯ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╕рд┐рдЦрд╛рдПрдБрдЧреЗред

рд╣реЗрдбрд░ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдЕрдиреНрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
Zabbix рд╕рд░реНрд╡рд░ рдкрд░ / usr / рд╕реНрдерд╛рдиреАрдп / рдмрд┐рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕реВрдЪреА:
 -rwxr-xr-x 1 root staff 429 Mar 17 03:06 client_ssh.py -rwxr-xr-x 1 root staff 418 Mar 17 04:58 client_telnet.py -rwxr-xr-x 1 root staff 412 Mar 17 05:00 client_vnc.py 

рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рд╣рдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ
client_ssh.py
 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import sys if sys.argv[2] == 'Admin': PORT=9090 elif sys.argv[2] == 'Admin1': PORT=9091 sock = socket.socket() sock.connect(('localhost', PORT)) os = sock.recv(64) if os == "Windows": sock.send('C:\\apps\\putty.exe -ssh root@' + sys.argv[1]) elif os == "Linux": sock.send('/usr/bin/konsole -e ssh root@'+ sys.argv[1]) sock.close() 

client_vnc.py
 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import sys if sys.argv[2] == 'Admin': PORT=9090 elif sys.argv[2] == 'Admin1': PORT=9091 sock = socket.socket() sock.connect(('localhost', PORT)) os = sock.recv(64) if os == "Windows": sock.send('c:\\apps\\vnc.exe ' + sys.argv[1]) elif os == "Linux": sock.send('/usr/bin/X11/gvncviewer '+ sys.argv[1]) sock.close() 

client_telnet.py
 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import sys if sys.argv[2] == 'Admin': PORT=9090 elif sys.argv[2] == 'Admin1': PORT=9091 sock = socket.socket() sock.connect(('localhost', PORT)) os = sock.recv(64) if os == "Windows": sock.send('C:\\apps\\putty.exe -telnet ' + sys.argv[1]) elif os == "Linux": sock.send('/usr/bin/konsole -e telnet '+ sys.argv[1]) sock.close() 


рд╣рдо рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХреЛрдб рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗ, рдкрд┐рдЫрд▓реЗ рдЕрдзреНрдпрд╛рдпреЛрдВ рдореЗрдВ рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред
рдореИрдВ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ vnc рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдкреЛрд░реНрдЯреЗрдмрд▓ рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдФрд░ рд╕рдм рдХреБрдЫ c:\apps\ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЯреЗрд▓рдиреЗрдЯ рдФрд░ vnc рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Zabbix рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЕрдзреНрдпрд╛рдп 1 рд╕реЗ рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ ssh рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдирд╛рдо рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
Script_exes.php рдлрд╝рд╛рдЗрд▓ рдХреЛ рднреА рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
рдирдП рд░реВрдк рд╕реЗ рдмрджрд▓реА рд╣реБрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕_рдкреЗ.рдПрд╕рдкреАрдкреА рдХреЛрдб
 <?php /* ** Zabbix ** Copyright (C) 2001-2014 Zabbix SIA ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **/ require_once dirname(__FILE__).'/include/config.inc.php'; $page['title'] = _('Scripts'); $page['file'] = 'scripts_exec.php'; define('ZBX_PAGE_NO_MENU', 1); require_once dirname(__FILE__).'/include/page_header.php'; $NewCommand4RunSSH = '/usr/local/bin/client_ssh.py {HOST.IP} '. CWebUser::$data['alias']; $NewCommand4RunVNC = '/usr/local/bin/client_vnc.py {HOST.IP} '. CWebUser::$data['alias']; $NewCommand4RunTELNET = '/usr/local/bin/client_telnet.py {HOST.IP} '. CWebUser::$data['alias']; // VAR TYPE OPTIONAL FLAGS VALIDATION EXCEPTION $fields = array( 'hostid' => array(T_ZBX_INT, O_OPT, P_ACT, DB_ID, null), 'scriptid' => array(T_ZBX_INT, O_OPT, null, DB_ID, null) ); check_fields($fields); ob_flush(); flush(); $scriptId = getRequest('scriptid'); $hostId = getRequest('hostid'); $data = array( 'message' => '', 'info' => DBfetch(DBselect('SELECT s.name FROM scripts s WHERE s.scriptid='.zbx_dbstr($scriptId))) ); if ($scriptId == 5) { DBexecute('update zabbix.scripts set command='."'".$NewCommand4RunSSH."'".' where scriptid=5;'); } if ($scriptId == 6) { DBexecute('update zabbix.scripts set command='."'".$NewCommand4RunVNC."'".' where scriptid=6;'); } if ($scriptId == 7) { DBexecute('update zabbix.scripts set command='."'".$NewCommand4RunTELNET."'".' where scriptid=7;'); } $result = API::Script()->execute(array( 'hostid' => $hostId, 'scriptid' => $scriptId )); $isErrorExist = false; if (!$result) { $isErrorExist = true; } elseif ($result['response'] == 'failed') { error($result['value']); $isErrorExist = true; } else { $data['message'] = $result['value']; } if ($isErrorExist) { show_error_message( _('Cannot connect to the trapper port of zabbix server daemon, but it should be available to run the script.') ); } // render view $scriptView = new CView('general.script.execute', $data); $scriptView->render(); $scriptView->show(); require_once dirname(__FILE__).'/include/page_footer.php'; 


рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╡реАрдбрд┐рдпреЛред
рдмрд┐рдирд╛ рдЖрд╡рд╛рдЬрд╝ рдХреЗ рднреА рдпрд╣рд╛рдБ рдмреЗрд╣рддрд░ рд╣реИред



рдирд┐рд╖реНрдХрд░реНрд╖ред


рд╣рдо рдЪреАрдЬреЛрдВ рдХреЛ рдХреНрд░рдо рдореЗрдВ рд░рдЦреЗрдВрдЧреЗ рдФрд░ рд╣рдорд╛рд░реЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдХреБрдЫ рдЪрдордХ рджреЗрдВрдЧреЗред

рд╕рдЦреНрддреА рд╕реЗ рдмреЛрд▓рдирд╛, рдпрд╣рд╛рдБ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реИ рдФрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП, рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ, рдкрд╛рдпрдерди рдбреЗрдореЙрди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╡рд╣ рдПрдХ рдбрдмрд▓ рдХрд╛рдВрдЯрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЪреБрдкрдЪрд╛рдк рдЧреНрд░рд╛рд╣рдХ рд▓рд┐рдкрд┐рдпреЛрдВ рд╕реЗ рдЖрджреЗрд╢реЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред
рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди, рдкрд╣рд▓реА рдЪреАрдЬреЗрдВ рдкрд╣рд▓реЗред

рд▓рд┐рдирдХреНрд╕ рдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ:
 fessae@workbook:~/sh/python > pwd /home/fessae/sh/python fessae@workbook:~/sh/python > ll total 12 -rwxr-xr-x 1 fessae fessae 2880 Feb 28 02:56 daemon.py* -rwxr-xr-x 1 fessae fessae 710 Mar 17 03:36 server.py* -rwxr-xr-x 1 fessae fessae 1122 Mar 13 04:59 ZabbixTeams.py* 

рд▓рд┐рдирдХреНрд╕ рд╕рд░реНрд╡рд░ рдХреА рдУрд░ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдХреЛрдбред
daemon.py
 #!/usr/bin/env python import sys, os, time, atexit from signal import SIGTERM class Daemon: """ A generic daemon class. Usage: subclass the Daemon class and override the run() method """ def __init__(self, pidfile, stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'): self.stdin = stdin self.stdout = stdout self.stderr = stderr self.pidfile = pidfile def daemonize(self): """ do the UNIX double-fork magic, see Stevens' "Advanced Programming in the UNIX Environment" for details (ISBN 0201563177) http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16 """ try: pid = os.fork() if pid > 0: # exit first parent sys.exit(0) except OSError, e: sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror)) sys.exit(1) # decouple from parent environment os.chdir("/") os.setsid() os.umask(0) # do second fork try: pid = os.fork() if pid > 0: # exit from second parent sys.exit(0) except OSError, e: sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror)) sys.exit(1) # redirect standard file descriptors sys.stdout.flush() sys.stderr.flush() si = file(self.stdin, 'r') so = file(self.stdout, 'a+') se = file(self.stderr, 'a+', 0) os.dup2(si.fileno(), sys.stdin.fileno()) os.dup2(so.fileno(), sys.stdout.fileno()) os.dup2(se.fileno(), sys.stderr.fileno()) # write pidfile atexit.register(self.delpid) pid = str(os.getpid()) file(self.pidfile,'w+').write("%s\n" % pid) def delpid(self): os.remove(self.pidfile) def start(self): """ Start the daemon """ # Check for a pidfile to see if the daemon already runs try: pf = file(self.pidfile,'r') pid = int(pf.read().strip()) pf.close() except IOError: pid = None if pid: message = "pidfile %s already exist. Daemon already running?\n" sys.stderr.write(message % self.pidfile) sys.exit(1) # Start the daemon self.daemonize() self.run() def stop(self): """ Stop the daemon """ # Get the pid from the pidfile try: pf = file(self.pidfile,'r') pid = int(pf.read().strip()) pf.close() except IOError: pid = None if not pid: message = "pidfile %s does not exist. Daemon not running?\n" sys.stderr.write(message % self.pidfile) return # not an error in a restart # Try killing the daemon process try: while 1: os.kill(pid, SIGTERM) time.sleep(0.1) except OSError, err: err = str(err) if err.find("No such process") > 0: if os.path.exists(self.pidfile): os.remove(self.pidfile) else: print str(err) sys.exit(1) def restart(self): """ Restart the daemon """ self.stop() self.start() def run(self): """ You should override this method when you subclass Daemon. It will be called after the process has been daemonized by start() or restart(). """ 

server.py
 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import subprocess import sys OS = "Linux" def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print 'Socket created' try: sock.bind(('127.0.0.1', 9090)) except socket.error , msg: print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1] sys.exit() print 'Socket bind complete' sock.listen(1) print 'Socket now listening' while True: conn, addr = sock.accept() conn.sendall(OS) data = conn.recv(1024) print 'Connected with ' + addr[0] + ':' + str(addr[1]) print data if not data: break subprocess.call(data, shell=True) conn.close() if __name__ == "__main__": main() 

ZabbixTeams.py
 #/usr/bin/env python #-*- coding: utf-8 -*- import sys sys.path.append("/home/fessae/sh/python") from daemon import Daemon import server class ZabbixTeams(Daemon): def run(self): while True: server.main() if __name__ == "__main__": daemon = ZabbixTeams('/tmp/zabbixteams.pid',stdout='/tmp/zabbixteams.log',stderr='/tmp/zabbixteamserr.log') if len(sys.argv) == 2: if 'start' == sys.argv[1]: daemon.start() elif 'stop' == sys.argv[1]: daemon.stop() elif 'restart' == sys.argv[1]: daemon.restart() else: print "Unknown command" sys.exit(2) sys.exit(0) else: print "usage: %s start|stop|restart" % sys.argv[0] sys.exit(2) 


рдбреЗрдореЙрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯрд╛рдЗрдк рдХрд░реЗрдВ
 python ZabbixTeams.py start 

рддрджрдиреБрд╕рд╛рд░ рд░реБрдХрдиреЗ рдХреЗ рд▓рд┐рдП
 python ZabbixTeams.py stop 

рд▓рд╛рдЗрди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ
 sys.path.append("/home/fessae/sh/python") 

ZabbixTeams.py рд╕реЗ, рдпрд╣ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред
рдЕрдкрдиреЗ рдкрд░рд┐рд╡реЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВред

рдЖрдк рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдкрд░рд┐рдгрд╛рдореА рдбреЗрдорди рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдЗрдХрди рдЫрдбрд╝реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдСрд╕реНрдЯреЛрд╕реНрдЯрд╛рд░реНрдЯ рдбреЗ рдпрд╛ рдУрдПрд╕ рдореЗрдВ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреИрд╕рд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╡рд┐рдВрдбреЛрдЬ рдУрдПрд╕
рдХреЛрдб рд▓рд┐рдЦрдиреЗ / рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ Python IDE PyCharm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рд╕реНрдерд┐рдд рдереАрдВ:


рдпрд╣ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реЛрдЧрд╛, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, pywin32 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ OS рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рд▓рд┐рдЦрдирд╛ред
рд▓реЗрдХрд┐рди рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдиреЗ рдмреНрд▓реЙрдХрд┐рдВрдЧ рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдореБрдЭреЗ рдкреВрд░реА рд╕реЗрд╡рд╛ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХреАред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдж рдореЗрдВ рдореИрдВ asyncore рд▓реЗ рд▓реВрдВрдЧрд╛ рдпрд╛ рдлрд┐рд░ рд╕рдм рдХреБрдЫ рдШреБрдорд╛- рдлрд┐рд░рд╛ рдХрд░ рд▓рд┐рдЦ рджреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдореИрдВ рдЗрд╕реЗ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдбреЗрдореЙрди рдЪрд▓рд╛рдирд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИред
  • рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ server.bat рдлрд╝рд╛рдЗрд▓ рд╣реИ:
      c:\Python27\python.exe C:\Users\FessAectan\PycharmProjects\ZabbixTeams\daemon.py 

  • рдмрджрд▓реЗ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ:
     import sys import subprocess CREATE_NO_WINDOW = 0x8000000 subprocess.Popen(["c:\Python27\python.exe", "-O","C:\Users\FessAectan\PycharmProjects\ZabbixTeams\server.py"], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, creationflags = CREATE_NO_WINDOW) 

  • рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣реА рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП
     #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import subprocess OS = "Windows" def main(): sock = socket.socket() print "Socket created" try: sock.bind(('127.0.0.1', 9091)) except socket.error , msg: print "Bind failed. Error Code : " + str(msg[0]) + " Message " + msg[1] sys.exit() print "Socket bind complete" sock.listen(1) print "Socket now listening" while True: conn, addr = sock.accept() conn.sendall(OS) data = conn.recv(1024) print "Connected with " + addr[0] + ":" + str(addr[1]) if not data: break subprocess.Popen(data, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, creationflags = 0x00000008) conn.close() if __name__ == "__main__": main() 

    Windows рдХреЗ рд▓рд┐рдП, subprocess.call рдХреЛ subprocess.Popen рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред



рдЕрдВрддрд┐рдо рд╡реАрдбрд┐рдпреЛред
* рдзреНрд╡рдирд┐ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд╣реИ;)


рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдлреЗрд╕реЗрдХреНрдЯрди рджреНрд╡рд╛рд░рд╛

ServerClub

Source: https://habr.com/ru/post/In217161/


All Articles