天天看点

linux下用paramiko登录防火墙设备

linux下用paramiko ssh登录防火墙设备

由于crt和xshell自带的python不识别一些库,crt只支持python2,目前没有计划支持Python3。

因此利用linux中安装的python来实现一些脚本。

缺点:

不如crt能够立马回显看到脚本运行的情况,要自己在设备上show才能知道运行结果。

import paramiko
import time


#创建SSH对象
ssh = paramiko.SSHClient()
#把要连接的机器添加到known_hosts文件中
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接服务器
ssh.connect(remote_ip='10.18.18.52', port=22, username='test', password='123')

delay = 1
#在SSH server端创建一个交互式的shell,且可以按自己的需求配置伪终端,可以在invoke_shell()函数中添加参数配置。
remote_conn = ssh.invoke_shell()
#buffer_size输入指令以及打印显示的大小
buffer_size = 2000
#显示结果
result = ""
#ssh登录设备默认是全局模式,这个和防火墙类型有关,send()就是我们需要发送命令
remote_conn.send('\n')
time.sleep(delay)
remote_conn.send('config\n')
result+=str(remote_conn.recv(buffer_size))
print(result)
#输出的结果就是所有发送的指令和设备上的回显,显示多少和buffer_size大小有关
#logout
ssh.close()

           

paramiko登录后发送命令的函数有很多,比如说常用的

stdin,stdout,stderr = ssh.exec_command(cmd,bufsize,timeout)

这条指令不适合用在防火墙,适合用在远程操作linux系统,因为exec_command参数使用只需要执行一次的命令,因为执行完该命令以后,shell会自动回到ssh初始连接的shell状态下。

在防火墙上使用这条命令会报Max try count must be an positive integer。

这里使用的是

chan = ssh.invoke_shell() #在SSH server端创建一个交互式的shell,且可以按自己的需求配置伪终端,可以在invoke_shell()函数中添加参数配置。

chan.send(cmd+’\n’) #利用send函数发送cmd到SSH server,添加’\n’做回车来执行shell命令。注意不同的情况,如果执行完telnet命令后,telnet的换行符是\r\n

chan.recv(bufsize) #通过recv函数获取回显。