python3paramikoパトロールネットワーク機器
運営・維持管理YouthO&M Youth
検査ネットワーク機器
paramikoを使用してネットワーク機器を検査したところ、大きな穴が見つかりました。構成に複数のページがあると2ページ目が表示されないことを確認するショーランです。paramikoがページをめくる場所が見つかりません。 。複数のスペースを追加することはあまり役に立ちません。
- この落とし穴を避け、自動的にログインして次のコマンドを送信します。これは些細なことです。2番目のスクリプトを参照してください。
cisco的全页打印显示配置信息的命令:
terminal length 0
show run
华为和H3C的全页打印显示配置信息的命令:
user-interface 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)
- スペースをもう少し追加してもページめくりの問題は解決しませんでした。最初のスペースは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.argv[1]
username = sys.argv[2]
password = sys.argv[3]
enable = sys.argv[4]
commands = sys.argv[5]
main(host,username,password,enable,commands)