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()