paramiko模块机遇SSH用于连接远程服务器并执行相关操作
SSHClient
用于连接远程服务器并执行基本命令
基于用户名密码连接:
import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname='host', port=port, username='user', password='password') # 执行命令 stdin, stdout, stderr = ssh.exec_command('df') # 获取命令结果 result = stdout.read() # 关闭连接 ssh.close() #stdin, stdout, stderr表示标准输入,标准输出,错误
sshclient 封装transport
import paramiko transport = paramiko.Transport(('hostname', 22)) transport.connect(username='wupeiqi', password='123') ssh = paramiko.SSHClient() ssh._transport = transport stdin, stdout, stderr = ssh.exec_command('df') print stdout.read() transport.close() SSHClient 封装 Transport
'''
和ssh的区别在于
ssh封装了transport的方法 也就是2 3 5 行
但是ssh并没有基于sftp的方法,所以只能用基于transport
'''
基于公钥密钥连接:
import paramiko private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa') # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname='c1.salt.com', port=22, username='wupeiqi', key=private_key) # 执行命令 stdin, stdout, stderr = ssh.exec_command('df') # 获取命令结果 result = stdout.read() # 关闭连接 ssh.close()
SFTPClient
用于连接远程服务器并执行上传下载
基于用户名密码上传下载
import paramiko transport = paramiko.Transport(('hostname',22)) transport.connect(username='wupeiqi',password='123') sftp = paramiko.SFTPClient.from_transport(transport)#实例化sftp的方法 # 将location.py 上传至服务器 /tmp/test.py sftp.put('/tmp/location.py', '/tmp/test.py') # 将remove_path 下载到本地 local_path sftp.get('remove_path', 'local_path') transport.close()
基于公钥密钥上传下载
import paramiko private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa') transport = paramiko.Transport(('hostname', 22)) transport.connect(username='wupeiqi', pkey=private_key ) sftp = paramiko.SFTPClient.from_transport(transport) # 将location.py 上传至服务器 /tmp/test.py sftp.put('/tmp/location.py', '/tmp/test.py') # 将remove_path 下载到本地 local_path sftp.get('remove_path', 'local_path') transport.close()
结合案例demo
import paramiko import uuid class haoroxy(object): def __init__(self): #初始化绑定账号密码主机端口信息 self.host = "localhost" self.port = 22 self.username = "chen" self.passwd = "chen27" def create_file(self): filename = str(uuid.uuid4()) f = open(filename,"w") f.write("hello python!") f.close() return filename def update(self): # 上传文件时调用创建文件函数返回文件名 filename = self.create_file() # 实例化sftp类 Up = paramiko.SFTPClient.from_transport(self._transport) #上传文件 Up.put(filename,'/home/chen/aabb.txt') def connect(self): #链接函数,启动后链接主机,定义一个公共的变量存储链接的通道 transport = paramiko.Transport((self.host,self.port)) transport.connect(username=self.username,password=self.passwd) self._transport = transport def close(self): #关闭链接 self._transport.close() def rename(self): #更改名称函数 #创立一个ssh链接 ssh = paramiko.SSHClient() #绑定链接通道 ssh._transport=self._transport #发送命令 stdin,stdout,stderr = ssh.exec_command('mv /home/chen/aabb.txt /home/chen/11111.txt') ssh.close() def run(self): self.connect() self.update() self.rename() self.close() aa = haoroxy() aa.run() ''' 案例代码 '''