Python----路由器远程控制
paramiko 是用 python 语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接
一、路由器基本连接
# -*- coding:utf-8 -*- import paramiko clent = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 clent.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # ssh.connect("ssh服务器ip地址",端口,"登录用户名", "密码") clent.connect(hostname="192.168.0.1", port=35200, #我这里用的本地端口转发 username="username", password="password") stdin, stdout, stderr = clent.exec_command('dis curr | 202103', get_pty=True) print(stdout.read()) clent.close()
二、连接支持ssh的机器,验证是否成功
import paramiko ssh = paramiko.SSHClient() ssh.connect( 'hostname', username = 'username', password = 'password' ) ssh.exec_command( 'ls -al' )
三、打印exe执行结果
client = SSHClient() client.load_system_host_keys() client.connect('ssh.example.com') stdin, stdout, stderr = client.exec_command('ls -l; sleep 10; ls -l') for line in stdout.readlines(): print line for line in stderr.readlines(): print line
四、实例
# 使用SSH远程登陆到主机,然后执行相应的command即可 # 首先第一步我们需要安装paramiko这个包 import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接不在know_hosts文件中的主机 ssh.connect("ssh服务器ip地址",端口,"登录用户名", "密码") execmd = 'cmd' #需要输入的命令 stdin, stdout, stderr = ssh.exec_command (execmd) print(stdout.read()) ssh.close()
使用Python只是为了更广的视野,同时也可以用 expect 来进行自动化的一些处理
举个例子:
#!/usr/bin/expect #使用expect来解释脚本 set timeout 30 #设置超时时间,单位为秒,默认情况下是10秒 set host "192.168.0.1" #设置连接主机配置 set username "root" set password "123456" spawn ssh $username@$host #用来传送交互命令 expect "*password*" {send "$password\r"} #当匹配到对应的输出结果时,就发送密码到打开的ssh进程,执行交互动作 interact #执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上
这个例子主要是用在交互式传输文件或者进入其他机器操作的时候用到 密码 自动输入并回车
本次实验主要是为了脚本在无人看守的情况下自动执行的实验