paramiko综合函数实现(复制粘贴即可使用)
类方法实现
通过类方法,初始化一次ssh连接,多次调用执行命令或传输文件。
transport封装函数(推荐使用)
import paramiko
class ssh(object):
def __init__(self,hostdata):
"""
初始化连接信息和ftp方法
:param hostdata: 连接信息字段
"""
self.ip= hostdata['ip']
self.port= hostdata['port']
self.user= hostdata['user']
self.passwd= hostdata['passwd']
self.transport= paramiko.Transport((self.ip,self.port))
self.transport.connect (username=self.user, password=self.passwd)
self.obj= paramiko.SSHClient()
self.obj._transport= self.transport
self.objsftp= self.obj.open_sftp ()
def run_cmd(self, cmd):
"""
执行命令方法
:param cmd: 需要执行的命令
:return:
"""
stdin, stdout, stderr= self.obj.exec_command (cmd)
return stdout.read ()
def run_cmdlist(self, cmdlist):
"""
执行命令方法列表
:param cmdlist: 命令列表
:return:
"""
self.resultList= []
for cmdin cmdlist:
stdin, stdout, stderr= self.obj.exec_command (cmd)
self.resultList.append (stdout.read ())
return self.resultList
def get(self,remotepath,localpath):
"""
下载文件方法(两个路径都要指定文件名)
:param remotepath: 服务器路径
:param localpath: 本地路径
:return:
"""
self.objsftp.get(remotepath,localpath)
def put(self,localpath,remotepath):
"""
上传文件方法(两个路径都要指定文件名)
:param localpath: 本地路径
:param remotepath: 服务器路径
:return:
"""
self.objsftp.put(localpath,remotepath)
def close(self):
"""
关闭方法
:return:
"""
self.objsftp.close ()
self.transport.close ()
# 函数的使用
if __name__== '__main__':
hostdata= {
'ip':'192.168.163.129',
'port':22,
'user':'root',
'passwd':'zhujingzhi',
}
host= ssh (hostdata) # 实例化远程函数给数据库里面的IP 端口 用户名 密码信息
v= host.run_cmd ('df -h') # 执行单个命令
vstr= v.decode (encoding='utf-8', errors='strict') # bytes转字符串
v1= host.run_cmdlist (['ls','df']) # 执行命令列表
print(hostdata['ip'])
print(vstr)
v= host.get('/root/anaconda-ks.cfg','D:\\采集\\a.cfg') # 下载文件
v= host.put('D:\\采集\\a.cfg','/opt/a.cfg') # 上传文件
host.close()
普通方式
import paramiko
class ssh(object):
def __init__(self,hostdata):
"""
初始化连接信息和ftp方法
:param hostdata: 连接信息字段
"""
self.ip= hostdata['ip']
self.port= hostdata['port']
self.user= hostdata['user']
self.passwd= hostdata['passwd']
self.obj= paramiko.SSHClient()
self.obj.set_missing_host_key_policy(paramiko.AutoAddPolicy ())
self.obj.connect (self.ip,self.port,self.user,self.passwd)
self.objsftp= self.obj.open_sftp ()
def run_cmd(self, cmd):
"""
执行命令方法
:param cmd: 需要执行的命令
:return:
"""
stdin, stdout, stderr= self.obj.exec_command (cmd)
return stdout.read ()
def run_cmdlist(self, cmdlist):
"""
执行命令方法列表
:param cmdlist: 命令列表
:return:
"""
self.resultList= []
for cmdin cmdlist:
stdin, stdout, stderr= self.obj.exec_command (cmd)
self.resultList.append (stdout.read ())
return self.resultList
def get(self,remotepath,localpath):
"""
下载文件方法(两个路径都要指定文件名)
:param remotepath: 服务器路径
:param localpath: 本地路径
:return:
"""
self.objsftp.get(remotepath,localpath)
def put(self,localpath,remotepath):
"""
上传文件方法(两个路径都要指定文件名)
:param localpath: 本地路径
:param remotepath: 服务器路径
:return:
"""
self.objsftp.put(localpath,remotepath)
def close(self):
"""
关闭方法
:return:
"""
self.objsftp.close ()
self.obj.close ()
# 函数的使用
if __name__== '__main__':
hostdata= {
'ip':'192.168.163.129',
'port':22,
'user':'root',
'passwd':'zhujingzhi',
}
host= ssh (hostdata) # 实例化远程函数给数据库里面的IP 端口 用户名 密码信息
v= host.run_cmd ('df -h') # 执行单个命令
vstr= v.decode (encoding='utf-8', errors='strict') # bytes转字符串
v1= host.run_cmdlist (['ls','df']) # 执行命令列表
print(hostdata['ip'])
print(vstr)
v= host.get('/root/anaconda-ks.cfg','D:\\采集\\a.cfg') # 下载文件
v= host.put('D:\\采集\\a.cfg','/opt/a.cfg') # 上传文件
host.close()