Guest User

Untitled

a guest
Nov 23rd, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.84 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import paramiko
  4. import sys
  5. import getpass
  6. import signal
  7. import collections
  8. import os
  9. import time
  10. import subprocess
  11. import datetime
  12.  
  13.  
  14. signal.signal(signal.SIGPIPE, signal.SIG_DFL) #IOError: Broken Pipe
  15. signal.signal(signal.SIGINT, signal.SIG_DFL) #KeyboardInterrupt: Ctrl-C
  16.  
  17.  
  18. DEVICES = {
  19. 'mgmt2' : '192.168.1.109',
  20. 'mgmt3' : '192.168.1.124'
  21. }
  22.  
  23.  
  24. class bcolors:
  25. HEADER = '\033[95m'
  26. OKBLUE = '\033[94m'
  27. OKGREEN = '\033[92m'
  28. WARNING = '\033[93m'
  29. FAIL = '\033[91m'
  30. ENDC = '\033[0m'
  31. BOLD = '\033[1m'
  32. UNDERLINE = '\033[4m'
  33. HIGHGREEN = '\033[1;42m'
  34.  
  35.  
  36.  
  37.  
  38. def getcred():
  39. global UN
  40. global PW
  41. print(bcolors.HEADER + "##################################################################################################" + bcolors.ENDC)
  42. print(bcolors.HEADER + "###### Script to extract information from F5 devices (specified in dictionary) #######" + bcolors.ENDC)
  43. print(bcolors.HEADER + "##################################################################################################" + bcolors.ENDC)
  44. print
  45. UN = raw_input(bcolors.WARNING + "Username: " + bcolors.ENDC)
  46. PW_init = getpass.getpass(bcolors.WARNING + "Password: " + bcolors.ENDC)
  47. PW2_init = getpass.getpass(bcolors.WARNING + "Verify Password: " + bcolors.ENDC)
  48. if PW_init == PW2_init:
  49. PW = PW_init
  50. print(bcolors.HIGHGREEN + "Password's match --- Proceeding to SSH-Login function of script" + bcolors.ENDC)
  51. else:
  52. print(bcolors.FAIL + "Password's don't match" + bcolors.ENDC)
  53. sys.exit()
  54.  
  55.  
  56.  
  57. def pingnode(name, host):
  58. print("[+] ----- Pinging %s : %s -----" % (name, host))
  59. ping = subprocess.Popen(["ping", "-c", "2", "-W", "1", "-i", "0.9", host], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  60. output = ping.communicate()[0]
  61. if not "bytes from" in output.decode('utf-8'):
  62. pass
  63. else:
  64. return name, host
  65.  
  66.  
  67.  
  68. def write_now(name, content):
  69. print('Running write_now func.. ')
  70. #filename = name + '.txt'
  71. filename = "{0}-{1}.txt".format(name, datetime.date.today())
  72. print(filename)
  73. if os.path.isfile(filename):
  74. print('Removing file: {0}'.format(name))
  75. os.remove(filename)
  76. with open(filename, 'a') as myfile:
  77. print('Creating file for host: {0}'.format(filename))
  78. myfile.write(content)
  79.  
  80.  
  81.  
  82.  
  83. def send_string_and_wait_for_string(remote, command, filename=None, wait_string=None, create_file=False, should_print=False):
  84. remote.send(command)
  85. receive_buffer = ""
  86. while not wait_string in receive_buffer:
  87. receive_buffer += remote.recv(1024)
  88.  
  89. if should_print:
  90. print receive_buffer
  91.  
  92. if create_file:
  93. write_now(filename, receive_buffer)
  94.  
  95. return receive_buffer
  96.  
  97.  
  98.  
  99.  
  100. def sshnode(hostname, ipaddr):
  101. to_be_run = ['cat output.txt']
  102. #to_be_run = ['show run']
  103. print
  104. print(bcolors.WARNING + "Hostname:{0} IP-Addr:{1}".format(hostname, ipaddr) + bcolors.ENDC)
  105. try:
  106. twrssh = paramiko.SSHClient()
  107. twrssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  108. twrssh.connect(ipaddr, port=22, username=UN, password=PW, timeout=5.0)
  109. remote = twrssh.invoke_shell()
  110. time.sleep(0.5)
  111. output = remote.recv(1000)
  112. #remote.send('term len 0\n')
  113. time.sleep(0.9)
  114. sys.stdout.flush()
  115. print(bcolors.WARNING + "Running command(s) on {0}...".format(hostname) + bcolors.ENDC)
  116. for ll in to_be_run:
  117. send_string_and_wait_for_string(remote, ll + "\n", filename=hostname, wait_string="tester@", create_file=True, should_print=False)
  118. #send_string_and_wait_for_string(remote, ll + "\n", wait_string="{0}#".format(hostname), create_file=True, should_print=False)
  119. except:
  120. print(bcolors.FAIL + "SSH failed for {0}: {1}".format(hostname, ipaddr) + bcolors.ENDC)
  121. pass
  122.  
  123.  
  124.  
  125. def main():
  126. output = [ pingnode(kk, vv) for kk,vv in DEVICES.iteritems() ]
  127. if output:
  128. getcred()
  129. [ sshnode(kk, vv) for kk,vv in filter(None, output) ]
  130.  
  131.  
  132.  
  133. if __name__ == '__main__':
  134. main()
Add Comment
Please, Sign In to add comment