一段小demo:
import paramiko
import time
client = paramiko.SSHClient() #创建SSH连接
client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #自动确认陌生设备
client.connect(hostname=hostname,
username=username,
password=password) #连接
chan = client.invoke_shell() #打开channel
chan.send('screen-length 0 tem \n') #输入命令
time.sleep(1)
chan.send('dis cur \n')
time.sleep(5) #设置等待时间
info = chan.recv(99999).decode() #接收输出信息
client.close()
首先安装并导入paramiko,用pycharm的可以直接去Files >> Settings >> Project:xxxxx >>Python Interpreter
右边的+号搜索paramiko直接安装,也可以在终端用命令安装pip install paramiko
我的思路:
查看交换机路由器经常用的肯定是show run
或者dis cur
。直接输入命令,不会一下输出所有的配置信息,需要我们手动按空格键。要在脚本里面实现这个逻辑判断会浪费大量时间,所以就用到了screen-length 0 tem
这就引发了第二个问题,多命令输入。其实不仅如此,像思科或者锐捷的设备查看配置要进到特权模式才能看,所以多命令输入不可避免。我也试过了exec_command
这个方法,在多命令的情况下并不好用,所以选择了send
方法。
第三个问题出现了,当我一股脑输入了chan.send('screen-length 0 tem \n')
和chan.send('dis cur \n')
。在测试运行的时候却发现配置并没有打印全,且不报错。经过了搜索,发现我没有设置等待时间,导致信息没输出完就被接收了。
最后一个问题就是当我接收到了所有信息,不管时打印在终端还是输出在文本里,原本交换机上的格式没有了。这里就需要在recv()
后面加上decode()
来重新编码保持格式。