python网络编程-paramiko
python基础学习日志day8-paramiko
一:简介
Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作
现有这样的需求:需要使用windows客户端,远程连接到Linux服务器,查看上面的日志状态,大家通常使用的方法会是:
1:用telnet
2:用PUTTY
3:用WinSCP
4:用XManager等…
那现在如果需求又增加一条,要从服务器上下载文件,该怎么办?那常用的办法可能会是:
1:Linux上安装FTP并配置
2:Linux上安装Sambe并配置…
大家会发现,常见的解决方法都会需要对远程服务器必要的配置,如果远程服务器只有一两台还好说,
如果有N台,还需要逐台进行配置,或者需要使用代码进行以上操作时,上面的办法就不太方便了。
使用paramiko可以很好的解决以上问题
二:paramiko使用
1)SSHClient于连接远程服务器并执行基本命令
基于用户名密码连接:
# -*- coding:utf-8 -*- __author__ = 'shisanjun' import paramiko #创建SSH对象 ssh=paramiko.SSHClient() #允许连接不在know_host文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy) #连接服务器 ssh.connect(hostname="192.168.0.131",port=22,username="root",password="redhat") #执行命令 stdin,stdout,stderr=ssh.exec_command("df -h") #获取命令结果 result=stdout.read() print(result.decode()) print(stderr.read().decode()) #关闭连接 ssh.close()
SSHClient封装Transport
# -*- coding:utf-8 -*- __author__ = 'shisanjun' import paramiko #创建Transport对象 transport=paramiko.Transport(("192.168.0.131",22)) transport.connect(username="root",password="redhat") #创建SSH对象 ssh=paramiko.SSHClient() ssh._transport=transport #执行命令 stdin,stdout,stderr=ssh.exec_command("df -h") print(stdout.read().decode()) #关闭连接 transport.close()
基于公钥密钥连接:
# -*- coding:utf-8 -*- __author__ = 'shisanjun' import paramiko private_key=paramiko.RSAKey.from_private_key_file("id_rsa") #创建SSH对象 ssh=paramiko.SSHClient() #允许连接不在Know_hosts主件中的主要 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy) #连接服务器 ssh.connect(hostname="192.168.0.131",port=22,pkey=private_key) #执行命令 stdin,stdout,stderr=ssh.exec_command("df -h") print(stdout.read().decode()) #关闭连接 ssh.close()
# -*- coding:utf-8 -*- __author__ = 'shisanjun' import paramiko private_key=paramiko.RSAKey.from_private_key_file("id_rsa") transport=paramiko.Transport(("192.168.0.131",22)) transport.connect(username="root",pkey=private_key) #创建SSH对象 ssh=paramiko.SSHClient() ssh._transport=transport #执行命令 stdin,stdout,stderr=ssh.exec_command("df -h") print(stdout.read().decode()) #关闭连接 ssh.close()
SFTPClient
用于连接远程服务器并执行上传下载
基于用户名密码上传下载
# -*- coding:utf-8 -*- __author__ = 'shisanjun' import paramiko trasport=paramiko.Transport(("192.168.0.131",22)) trasport.connect(username="root",password="redhat") sftp=paramiko.SFTPClient.from_transport(trasport) #id_rsa 上传至服务器 /tmp/id_rsa, sftp.put("id_rsa","/tmp/id_rsa")#远程必须批定文件名,否则报错 #将remove_path 下载到本地 local_path sftp.get("/tmp/id_rsa","id_rsa1") trasport.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()