paramiko模块
一、paramiko简介
paramiko是基于Python实现用于做远程控制的第三方模块,使用该模块可以对远程服务器进行命令或文件操作,支持认证及密钥方式,自动化运维管理工具fabric和ansible内部的远程管理功能就是使用paramiko来现实的。
官网地址:https://pypi.python.org/pypi/paramiko
目前最新版本是2.0.0
二、paramiko安装
paramiko支持pip、easy_install或源码安装方式,推荐使用pip安装paramiko
1、在pycharm中使用pip安装paramiko (Python3中需要先升级pip到8.1.2版本 升级命令:pip install --upgrade pip)
下图是安装完成之后的截图。

2、在CentOS6.6中使用pip安装paramiko
pip3 install paramiko
安装过程中报错:

解决办法: yum install libffi libffi-devel
检验安装结果,导入模块没有提示异常则说明安装成功:

三、paramiko的核心组件
paramiko包含两个核心组件,分别是SSHClient类和SFTPClient类。
SSHClient
用于连接远程服务器并执行基本命令
基于用户名密码连接
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import paramiko
import sys
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='192.168.65.246', port=22, username='root', password='123,.abc')
# 执行命令
stdin, stdout, stderr = ssh.exec_command(sys.argv[1])
# 获取命令结果
result,err = stdout.read(),stderr.read()
if not err:
print(str(result,'utf-8'))
else:
print(err)
# 关闭连接
ssh.close()
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import sys 5 import paramiko 6 7 transport = paramiko.Transport(('192.168.65.246', 22)) 8 transport.connect(username='root', password='123,.abc') 9 10 ssh = paramiko.SSHClient() 11 ssh._transport = transport 12 13 stdin, stdout, stderr = ssh.exec_command(sys.argv[1]) 14 15 result = list(filter(lambda x: x is not None,[stdout.read(),stderr.read()]))[0] 16 print(str(result,'utf-8')) 17 18 transport.close()
基于公钥密钥连接
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import paramiko
import sys
private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='192.168.65.246', port=22, username='root', pkey=private_key)
# 执行命令
stdin, stdout, stderr = ssh.exec_command(sys.argv[1])
# 获取命令结果
result,err = stdout.read(),stderr.read()
if not err:
print(str(result,'utf-8'))
else:
print(err)
# 关闭连接
ssh.close()
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import paramiko 5 import sys 6 7 private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') 8 9 transport = paramiko.Transport(('192.168.65.246', 22)) 10 transport.connect(username='root', pkey=private_key) 11 12 ssh = paramiko.SSHClient() 13 ssh._transport = transport 14 15 stdin, stdout, stderr = ssh.exec_command(sys.argv[1]) 16 result = list(filter(lambda x: x is not None,[stdout.read(),stderr.read()]))[0] 17 print(str(result,'utf-8')) 18 19 transport.close()
SFTPClient
用于连接远程服务器并执行上传下载
基于用户名密码上传下载
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import paramiko
import sys
transport = paramiko.Transport(('192.168.65.246',22))
transport.connect(username='root',password='123,.abc')
sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('/data/pyscripts/miyao.py', '/root/miyao.py')
# 将remove_path 下载到本地 local_path
sftp.get('/root/miyao.py', '/root/miyao.py')
transport.close()
基于公钥密钥上传下载
1 #!/usr/bin/python3 2 # -*- coding:utf-8 -*- 3 4 import paramiko 5 6 private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') 7 8 transport = paramiko.Transport(('192.168.65.246', 22)) 9 transport.connect(username='root', pkey=private_key ) 10 11 sftp = paramiko.SFTPClient.from_transport(transport) 12 # 将location.py 上传至服务器 /tmp/test.py 13 sftp.put('/data/pyscripts/sftp.py', '/root/test.py') 14 # 将remove_path 下载到本地 local_path 15 sftp.get('/root/test.py', '/root/sftp.py') 16 17 transport.close()
注:代码中的主机均为VM虚拟机。
运维因自动化而有趣!

浙公网安备 33010602011771号