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

 

posted on 2017-06-19 20:29  shisanjun  阅读(188)  评论(0编辑  收藏  举报

导航