Python SSH Paramiko сохранить в файл - PullRequest
0 голосов
/ 21 мая 2018

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

output_filename = ip_address + ".txt"
file = open(output_filename, 'w')
file.write(output.decode)
file.close()

Чего не хватает?

Я получаю эту ошибку:

line 100, in fractal
    except 10060:
TypeError: catching classes that do not inherit from BaseException is not allowed

И этопросто не сохраняйте вывод.файл создан, но пустым.

import socket
import paramiko
import time
import sys

def fractal(ip, username, passwd, enapass, command, command2, command3, command4, devtype):

    ip_address = ip
    user = username
    password = passwd
    enapw = enapass
    commando = command
    commando2 = command2
    commando3 = command3
    commando4 = command4
    devtype = devtype
    print("Connecting to: "+ip + " on Port 22")
    try:
        if ip:
            global ssh_client
            ssh_client = paramiko.client.SSHClient()
            ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh_client.connect(hostname=ip_address, username=user, password=password, compress=True, look_for_keys=False, allow_agent=False, timeout=5)


            print("##########################  CONNECTED TO: "+ip_address +"  ##########################")

            remote_connection = ssh_client.invoke_shell()
            if devtype == 'CISCO':
                results = remote_connection.send("term len 0\n")
                print(results)
                time.sleep(2)
                results = remote_connection.send("show run\n")
                print(results)
                time.sleep(6)

            if devtype == 'F5':
                remote_connection.send("term len 0\n")
                time.sleep(2)
                remote_connection.send("sh ver\n")
                time.sleep(6)
            if devtype == 'LINUX':
                remote_connection.send("pwd\n")
                time.sleep(2)
            else:
                #print("Please set IP Address first!!!")
                pass
            if enapass:
                remote_connection.send("enable\n")
                # remote_connection.send("conf t\n")
                remote_connection.send(enapw)
                remote_connection.send("\n")
            else:
                pass
            if command:
                #remote_connection.send("show run\n")
                remote_connection.send(commando)
                remote_connection.send("\n")
            else:
                print("Command not found!")
            if command2:
                remote_connection.send(commando2)
                remote_connection.send("\n")
            else:
                pass
            if command3:
                remote_connection.send(commando3)
                remote_connection.send("\n")
            else:
                pass
            if command4:
                remote_connection.send(commando4)
                remote_connection.send("\n")
            else:
                pass
            time.sleep(1)
            output = remote_connection.recv(65535)
            print(output.decode())
            print("##########################  END OF: " + ip_address + "  ##########################")
            reader = ssh_client.connect
            ssh_client.close
            output_filename = ip_address + ".txt"
            file = open(output_filename, 'w')
            file.write(output)
            file.close()

    except TypeError:
        print('Please check your settings!')
    except UnboundLocalError:
        print('Please check IP Address!')
    except paramiko.AuthenticationException:
        print(ip+": Authentication failed, please verify your credentials.")
    except paramiko.SSHException as sshException:
        print(ip+": Unable to establish SSH connection: %s" % sshException)
    except paramiko.BadHostKeyException as badHostKeyException:
        print(ip+": Unable to verify server's host key: %s" % badHostKeyException)
    except socket.error:
        print(ip+": Couldn't connect to server. Check IP Address and Port")
        # sys.exit()
    except 10060:
        print(ip+": The host was not reachable")
    except socket.gaierror:
        print(ip+': Check IP Address')
    except 11004:
        print(ip+": The host was not reachable")
    except IOError as e:
        print("I/O error({0}): {1}".format(e.errno, e.strerror))
    except ValueError:
        print("Could not convert data to an integer.")
    except FileNotFoundError:
        print("No File was selected!")
    except:
        print("Unexpected error:", sys.exc_info()[0])
        raise
    # countErr = paramiko.AuthenticationException
    # countErr = 0
    # for countErr in countErr:
    #    count = count + 1
    # print ("Athentication failures: "+countErr)

1 Ответ

0 голосов
/ 21 мая 2018

Это происходит только в Python3, потому что except теперь ожидает класс, который является подклассом BaseException.И целое число 10060 не является.

>>> try:
...   raise ValueError
... except 10080:
...   print('dfsdf')
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
ValueError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
TypeError: catching classes that do not inherit from BaseException is not allowed

Таким образом, Paramiko вызывает другую ошибку, но обработка ошибок прекращается, когда он пытается оценить оператор except 10060.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...