python3 paramiko 巡檢網路裝置

2021-10-07 22:35:15 字數 3686 閱讀 3173

用paramiko做網路裝置巡檢,發現大坑,就是show run這種看配置有多頁存在的沒法顯示第二頁,沒找到paramiko翻頁的地方,新增多個空格也不是很好使。

避開這個坑,自動登入搞定了後面命令怎麼傳都是小事了,傳參參考第二個指令碼吧。

cisco的全頁列印顯示配置資訊的命令:

terminal length 0

show run

華為和h3c的全頁列印顯示配置資訊的命令:

user-inte***ce vty 0 4

screen-length 0

display current-configuration

直接在命令裡面傳入全域性模式密碼。

#!/usr/bin/python3

# -*- coding:utf-8 -*-

import paramiko

import time

def main(host, username, password, commands):

client = paramiko.sshclient()

client.set_missing_host_key_policy(paramiko.autoaddpolicy())

client.connect(host, username=username, password=password,

port=22, allow_agent=false, look_for_keys=false)

channel = client.invoke_shell()  # 請求互動式shell會話

for command in commands:

channel.send(command + "\n")  # 傳送指令

while not channel.recv_ready():  # 等待資料到達

time.sleep(1)

output = channel.recv(40960)  # 從通道接收資料 nbytes(int)–讀取的最大位元組數

print(output.decode())

client.close()

if __name__ == '__main__':

host = '192.168.208.131'

username = 'root'

password = 'root.123'

commands = ['enable', 'cisco', 'terminal length 0','show run', 'show ip int br', 'exit']  #全頁列印terminal length 0

main(host, username, password, commands)

commands = ['enable', 'cisco', ,'show run', ' ',' ', 'exit']
多新增幾個空格還是沒有解決翻頁的問題

最早用pexpect寫的,可以避開這個坑,就是靈活性太低。遇到ssh公鑰改變的就連不上了,每個廠家都要重寫。。。。。

#!/usr/bin/python

#-*- coding:utf-8 -*-

import pexpect

import sys

import time

def main(host,username,password,enable,commands):

# host = '192.168.208.131'

# username = 'root'

# password = 'root.123'

# enable = 'cisco'

# commands = [ show processes memory ]

commands = str(commands).split(';')

child = pexpect.spawnu('ssh %s@%s' % (username,host))

child.logfile = sys.stdout

login = child.expect(['yes/no', '[p|p]assword:', pexpect.eof, pexpect.timeout])

if login == 0:

child.sendline('yes')

child.expect('[p|p]assword:')

child.sendline('%s' % password)

elif login == 1:

child.sendline('%s' % password)

child.expect('\>')

child.sendline('enable')

child.expect('[p|p]assword:')

child.sendline('%s' % enable)

for command in commands:

child.expect('\#')

child.sendline('%s' % command)

index = child.expect(['--more--','\#'])

if index == 0:

for i in range(5):

child.send(' ')

time.sleep(1)

#child.sendline(' ')

child.sendline('')

#time.sleep(2)

child.expect('\#')

child.sendline('exit')

child.close()

if __name__ == '__main__':

host = sys.ar**[1]

username = sys.ar**[2]

password = sys.ar**[3]

enable = sys.ar**[4]

commands = sys.ar**[5]

main(host,username,password,enable,commands)

測試用的是eve和gns3 ,網路模擬器我玩的賊6.。。。。

pexpect 又開始踩坑,模擬器每次開起來公鑰就變了,就登不上了,生產環境極少概率會這樣舊裝置替換啥的,想想還是放棄這個,後面不知道會遇到多少坑。

解決辦法 ,清理下公鑰

這邊for迴圈打幾個空格進去,匹配到--more--就敲起來,可以解決,就是靈活性太低,還是用全頁顯示比較好

python3 paramiko實現ssh客戶端

ssh客戶端實現主要有以下四個問題 第乙個問題是在python中ssh客戶端使用哪個包實現 我們這裡使用的是paramiko 第二個問題是怎麼連線伺服器 連線伺服器直接使用connect 函式就可以了,有個坑是不在known hosts檔案中的機器預設不允許連線需要處理一下 第三個問題是連上之後怎麼...

python3 paramiko實現ssh客戶端

ssh客戶端實現主要有以下四個問題 第乙個問題是在python中ssh客戶端使用哪個包實現 我們這裡使用的是paramiko 第二個問題是怎麼連線伺服器 連線伺服器直接使用connect 函式就可以了,有個坑是不在known hosts檔案中的機器預設不允許連線需要處理一下 第三個問題是連上之後怎麼...

python3 paramiko實現ssh客戶端

pip install paramiko ssh客戶端實現主要有以下四個問題 第乙個問題是在python中ssh客戶端使用哪個包實現 我們這裡使用的是paramiko 第二個問題是怎麼連線伺服器 連線伺服器直接使用connect 函式就可以了,有個坑是不在known hosts檔案中的機器預設不允許...