python之paramiko模块

    最近在做一些使用python连接linux的操作,使用到了paramiko模块,这次就专门针对paramiko模块来做一次讲解。paramiko是一个Python(2.6 +,3.3 +)的ssh 协议的实施,提供了连接远程连接服务器端的功能。

一、Paramiko的安装

    安装Paramiko,我们可以使用pip来进行安装。

pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto
pip3 install pycrypto
pip3 install paramiko

二、模块使用

ssh连接主要分为两种形式,第一种是通过用户名密码来连接,第二种则是使用公钥秘钥连接,通过是用paramiko远程操作,其实本质也分为两种:(1)只用SSHClient (2)自己创建一个transport

下面我们来尝试使用ssh连接

import paramiko
#创建SSHClient对象
ssh = paramiko.SSHClient()
#允许连接不在know_hosts的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接服务器
ssh.connect(hostname='127.0.0.1',username='besttestliml',password='besttest_liml',port=22)
#执行命令
stdin,stdout,stderr = ssh.exec_command('ls /opt/lampp')
#获取结果
result = stdout.read()
#关闭连接
ssh.close()
print(result.strip().decode())

SSHClient 封装 Transport连接

transport = paramiko.Transport(('127.0.0.1', 22))
transport.connect(username='besttestliml', password='besttest_liml')

ssh = paramiko.SSHClient()
ssh._transport = transport

stdin, stdout, stderr = ssh.exec_command('df')
print(stdout.read().decode())

transport.close()

基于公钥登录

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='www.besttest.cn', port=22, username='besttestliml', key=private_key)
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()
# 关闭连接
ssh.close()

SFTPClient:

用于连接远程服务器并进行上传下载功能。

(1)基于用户名密码上传下载

import paramiko
 
transport = paramiko.Transport(('127.0.0.1',22))
transport.connect(username='besttest',password='besttest')
 
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()

(2)基于公钥秘钥上传下载

import paramiko
 
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
 
transport = paramiko.Transport(('127.0.0.1', 22))
transport.connect(username='besttest', 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()

 

 

发表评论

电子邮件地址不会被公开。