python中使用SSH登录设备可以使用paramiko库中的SSHClient组件,paramiko库为第三方库,在使用时需要先安装改库并引入使用,安装时使用 pip进行安装,如下:
paramiko库的SSHClient基本使用:
①connect()方法主要用于与服务器之间连接认证时的参数传递,主要参数有:
hostname:需要连接的目的主机。
port:SSH使用的目标端口,默认22
username:需要验证的用户名
password:需要验证的密码
②set_missing_host_key_policy():当连接的远程主机没有本地主机密钥时会弹出是否接受的对话框,当使用AutoAddPolicy 自动添加主机名及主机密钥到本地HostKeys对象时,不依赖load_system_host_key的配置。即新建立ssh连接时不需要再输入yes或no进行确认;当使用WarningPolicy 时会记录一个未知的主机密钥的python警告并接受,当使用RejectPolicy 自动拒绝未知的主机名和密钥,依赖load_system_host_key的配置,在默认配置下使用的是此选项。
time库主要用于时间戳的获取
本次以单台设备作为测试目标,用脚本登录到设备获取配置文件。
本次实验拓扑如下:
1、引入库文件,我们使用paramiko库和time库
import paramiko
import time
2、定义登录使用的参数
ip='10.0.1.254'
username='localadmin'
password='admin@123'
3、使用open方法打开或者创建一个log文件,用于存储收集到的信息
log=open('G:/TEST/log.log','w')
open方法给出路径后,如果有相关文件,会打开相关文件进行写操作,如果没有回创建新文件进行操作。
4、初始化一个SSH客户端
ssh=paramiko.SSHClient()
5、定义在没有本地key的情况下的处理情况,使用自动添加
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
6、连接服务器
ssh.connect(hostname=ip,username=username,password=password)
7、调用ssh的shell命令行属性进行命令操作
com=ssh.invoke_shell()
首先向设备发送一个回车,准备进行输入
com.send('\n')
time.sleep(0.5)
com.send('screen-length 0 temporary \n') //此命令是为了能够一页显示配置文件
time.sleep(1) //命令敲完后延时一段时间再继续输入其它命令
com.send('dis cu \n')
time.sleep(2)
8、定义一个变量,用于接收ssh返回的信息
result=com.recv(65535).decode('utf-8') //返回的数据为字节集,是一整串的字符,所以需要把符号转换为普通文字,使显示正常
9、把接收到的数据写到log文件里
log.write(str(result)) //需要注意的是log.write()的参数是文本型,而接收到的数据是字节集,所以需要进行类型转换
10、关闭不需要的进程
ssh.close()
log.close()