基于使用paramiko执行远程linux主机命令(详解)
paramiko是python的SSH库,可用来连接远程linux主机,然后执行linux命令或者通过SFTP传输文件。
关于使用paramiko执行远程主机命令可以找到很多参考资料了,本文在此基础上做一些封装,便于扩展与编写脚本。
下面直接给出代码:
#coding:utf-8
importparamiko
importre
fromtimeimportsleep
#定义一个类,表示一台远端linux主机
classLinux(object):
#通过IP,用户名,密码,超时时间初始化一个远程Linux主机
def__init__(self,ip,username,password,timeout=30):
self.ip=ip
self.username=username
self.password=password
self.timeout=timeout
#transport和chanel
self.t=''
self.chan=''
#链接失败的重试次数
self.try_times=3
#调用该方法连接远程主机
defconnect(self):
whileTrue:
#连接过程中可能会抛出异常,比如网络不通、链接超时
try:
self.t=paramiko.Transport(sock=(self.ip,22))
self.t.connect(username=self.username,password=self.password)
self.chan=self.t.open_session()
self.chan.settimeout(self.timeout)
self.chan.get_pty()
self.chan.invoke_shell()
#如果没有抛出异常说明连接成功,直接返回
printu'连接%s成功'%self.ip
#接收到的网络数据解码为str
printself.chan.recv(65535).decode('utf-8')
return
#这里不对可能的异常如socket.error,socket.timeout细化,直接一网打尽
exceptException,e1:
ifself.try_times!=0:
printu'连接%s失败,进行重试'%self.ip
self.try_times-=1
else:
printu'重试3次失败,结束程序'
exit(1)
#断开连接
defclose(self):
self.chan.close()
self.t.close()
#发送要执行的命令
defsend(self,cmd):
cmd+='\r'
#通过命令执行提示符来判断命令是否执行完成
p=re.compile(r':~#')
result=''
#发送要执行的命令
self.chan.send(cmd)
#回显很长的命令可能执行较久,通过循环分批次取回回显
whileTrue:
sleep(0.5)
ret=self.chan.recv(65535)
ret=ret.decode('utf-8')
result+=ret
ifp.search(ret):
printresult
returnresult
下面进行测试:
#主机IP错误,无法连接的情况
if__name__=='__main__':
host=Linux('192.168.180.12','root','xxxx')
host.connect()
6host.send('ls-l')
host.close()
按Ctrl+C复制代码按Ctrl+C复制代码
连接192.168.180.12失败,进行重试
连接192.168.180.12失败,进行重试
连接192.168.180.12失败,进行重试
重试3次失败,结束程序
Processfinishedwithexitcode1
#链接正常的情况
if__name__=='__main__':
host=Linux('192.168.180.128','root','love')
host.connect()
host.send('ls-l')
host.close()
运行结果:
连接192.168.180.128成功
Lastlogin:SatMay2107:25:392016from192.168.180.1
Havealotoffun...
ls-l
192:~#ls-l
total28
-rw-------1rootroot18May2107:17.bash_history
drwxr-xr-x1rootroot28May2106:02.config
drwx------1rootroot22May2105:57.dbus
drwx------1rootroot0Sep252014.gnupg
drwxr-xr-x1rootroot10May2106:15.local
-rw-------1rootroot55May2106:03.xauth5mesuo
-rw-------1rootroot55May2107:22.xauthEYqDmK
-rw-------1rootroot55May2107:25.xauthGTrohO
-rw-------1rootroot55May2107:09.xauthP90TnG
-rw-------1rootroot48May2107:40.xauthjW8pI9
-rw-------1rootroot48May2107:40.xauthx8T4ED
drwxr-xr-x1rootroot0Sep252014bin
drwxr-xr-x1rootroot38May2105:43inst-sys
192:~#
Processfinishedwithexitcode0
以上这篇基于使用paramiko执行远程linux主机命令(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。