簡體   English   中英

python ssh paramiko保存到文件

[英]python ssh paramiko save to file

我想將ssh連接的所有輸出保存到文件中。 ssh連接工作正常,對於標准輸出也可以輸出。 我想為文件中的每個連接單獨創建一個文件。 我將輸出行更改為下面的行,也將其移到上面

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)

僅在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語句時,錯誤處理except 10060

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM