python paramiko 批量运维管理详解

简介: python paramiko 批量运维管理详解

python 模块 paramiko批量远程

文章目录

python 模块 paramiko批量远程

1. 简介

2. 安装

3. paramiko核心组件

3.1 SSHClient类

3.1.1 connect 方法

3.1.2 exec_command方法

3.1.3 load_system_host_key方法

3.1.4 set_missing_host_key_policy方法

3.2 SFTPClient类

3.2.1 from_transport

3.2.2 put

3.2.3 get

3.2.4 其他

3.3 远程连接并执行命令

3.3.1 直接验证方式

3.3.2 SSHClient 封装 Transport

3.3.3 基于公钥密钥连接

3.3.4 SSHClient 封装 Transport 使用公钥方式

3.4 远程连接实现文件上传下载

3.4.1 基于用户名密码上传下载

3.4.2 基于公钥密钥上传下载

1. 简介

paramiko 模块是基于python实现了SSH2远程安全连接,支持认证和密钥方式,可以实现远程连接、命令执行、文件传输、中间SSH代理功能,相对于pexpect,封装层次更高。

2. 安装

pip install paramiko
easy_install paramiko
paramiko依赖第三方的Crypto,Ecdsa和pyhton-devel,所以需要安装

3. paramiko核心组件

3.1 SSHClient类

SSHClient类是SSH服务会话的高级表示,该类实现了传输、通道、以及SFTP的校验、建立的方法

3.1.1 connect 方法

connect方法实现了远程ssh连接并作校验

参数

hostname 连接的目标主机
port=SSH_PORT 指定端口
username=None 验证的用户名
password=None 验证的用户密码
pkey=None 私钥方式用于身份验证
key_filename=None 一个文件名或文件列表,指定私钥文件
timeout=None 可选的tcp连接超时时间
allow_agent=True, 是否允许连接到ssh代理,默认为True 允许
look_for_keys=True 是否在~/.ssh中搜索私钥文件,默认为True 允许
compress=False, 是否打开压缩
sock=None,
gss_auth=False,
gss_kex=False,
gss_deleg_creds=True,
gss_host=None,
banner_timeout=None

3.1.2 exec_command方法

远程执行命令的方法,该命令的输入与输出流为标准输入、标出输出、标准错误输出

参数

command 执行的命令
bufsize=-1 文件缓冲区大小
timeout=None
get_pty=False

3.1.3 load_system_host_key方法

夹在本地公钥文件,默认为~/.ssh/known_hosts

参数

filename=None 指定本地公钥文件

3.1.4 set_missing_host_key_policy方法

AutoAddPolicy

自动添加主机名及主机密钥到本地HostKeys对象,不依赖load_system_host_key的配置。即新建立ssh连接时不需要再输入yes或no进行确认

WarningPolicy

用于记录一个未知的主机密钥的python警告。并接受,功能上和AutoAddPolicy类似,但是会提示是新连接

RejectPolicy

自动拒绝未知的主机名和密钥,依赖load_system_host_key的配置。此为默认选项

用法:

ssh.paramiko.SSHClient()
set_missing_host_key_policy(paramiko.AutoAddPolicy())

3.2 SFTPClient类

SFTPCLient作为一个sftp的客户端对象,根据ssh传输协议的sftp会话,实现远程文件操作,如上传、下载、权限、状态

3.2.1 from_transport

创建一个已连通的SFTP客户端通道。

定义:

from_transport(cls,t)

示例:

import paramiko
t = paramiko.Transport(('192.168.56.132',22))
t.connect(username='root',password='1234567')
sftp = paramiko.SFTPClient.from_transport(t)

3.2.2 put

将本地文件上传到服务器,参数confirm:是否调用stat()方法检查文件状态,返回ls -l的结果。

定义:

put(localpath, remotepath, callback=None, confirm=True)

参数说明:

localpath(str类型),需上传的本地文件(源);

remotepath(str类型),远程路径(目标);

callback(funcation(int,int)),获取已接收的字节数及总传输字节数,以便回调函数调用,默认为None;

confirm(bool类型),文件上传完毕后是否调用stat()方法,以便确认文件的大小。示例:

localpath='/home/access.log'
remotepath='/data/logs/access.log'
sftp.put(localpath,remotepath)

3.2.3 get

从服务器下载文件到本地

定义:

get(remotepath, localpath, callback=None)

参数说明:

  • remotepath(str类型),需要下载的远程文件(源);
  • callback(funcation(int,int)),获取已接收的字节数及总和传输字节数,以便回调函数调用,默认为None.
    示例说明:
remotepath = '/data/logs/access.log'
localpath = '/home/access.log'
sftp.get(remotepath,localpath)

3.2.4 其他

  • remove() 在服务器上删除目录
  • rename() 在服务器上重命名目录
  • stat() 查看服务器文件状态
  • listdir() 列出服务器目录下的文件

3.3 远程连接并执行命令

实现远程连接主机,并执行命令,同时记录日志

3.3.1 直接验证方式

import paramiko
host = '172.16.200.45'
port = 22
user = 'root'
passwd = '123123'
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname=host, port=port, username=user, password=passwd)
paramiko.util.log_to_file('syslogin.log')  #将登录信息记录日志
 # 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()
print(result)
# 关闭连接
ssh.close()

3.3.2 SSHClient 封装 Transport

import paramiko
host = '172.16.200.45'
port = 22
user = 'root'
passwd = '123123'
transport = paramiko.Transport((host, port))
transport.connect(username=user, password=passwd)
ssh = paramiko.SSHClient()
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command('df')
print(stdout.read())

3.3.3 基于公钥密钥连接

import paramiko
private_key = paramiko.RSAKey.from_private_key_file('/home/fuzengjie/.ssh/id_rsa')
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='172.16.200.45', port=22, username='fuzengjie', key=private_key)
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()
# 关闭连接
ssh.close()

3.3.4 SSHClient 封装 Transport 使用公钥方式

import paramiko
private_key = paramiko.RSAKey.from_private_key_file('/home/fuzengjie/.ssh/id_rsa')
transport = paramiko.Transport(('172.16.200.45', 22))
transport.connect(username='fuzengjie', pkey=private_key)
ssh = paramiko.SSHClient()
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command('df')
transport.close()

3.4 远程连接实现文件上传下载

3.4.1 基于用户名密码上传下载

import paramiko
host = '172.16.200.45'
port = 22
user = 'root'
passwd = '123123'
transport = paramiko.Transport((host,port))
transport.connect(username=user,password=passwd)
sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
a = sftp.put('/Users/fuzengjie/1', '/tmp/fuzj123',confirm=True)
print(a)  #打印上传到服务器上的文件状态
# 将remove_path 下载到本地 local_path
sftp.get('/root/tesst.py', '/Users/fuzengjie/test.py')
transport.close()

3.4.2 基于公钥密钥上传下载

import paramiko
private_key = paramiko.RSAKey.from_private_key_file('/home/fuzengjie/.ssh/id_rsa')
transport = paramiko.Transport(('172.16.200.45', 22))
transport.connect(username='fuzengjie', 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('/root/123.txt', '/tmp/123')
transport.close()

参考:

相关文章
|
3月前
|
运维 Prometheus 监控
自动化运维的魔法:使用Python脚本简化日常任务
【8月更文挑战第50天】在数字化时代的浪潮中,自动化运维成为提升效率、减少人为错误的利器。本文将通过一个实际案例,展示如何利用Python脚本实现自动化部署和监控,从而让运维工作变得更加轻松和高效。我们将一起探索代码的力量,解锁自动化运维的神秘面纱,让你的工作环境焕然一新。
170 81
|
1月前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
91 3
|
1月前
|
缓存 运维 NoSQL
python常见运维脚本_Python运维常用脚本
python常见运维脚本_Python运维常用脚本
32 3
|
1月前
|
运维 监控 Linux
自动化运维:如何利用Python脚本优化日常任务##
【10月更文挑战第29天】在现代IT运维中,自动化已成为提升效率、减少人为错误的关键技术。本文将介绍如何通过Python脚本来简化和自动化日常的运维任务,从而让运维人员能够专注于更高层次的工作。从备份管理到系统监控,再到日志分析,我们将一步步展示如何编写实用的Python脚本来处理这些任务。 ##
|
2月前
|
运维 监控 网络安全
Python 在网络运维方面的自动化应用实例
Python 在网络运维方面的自动化应用实例
68 4
|
2月前
|
测试技术 网络安全 数据安全/隐私保护
Paramiko是一个用于处理SSHv2协议的Python库
Paramiko是一个用于处理SSHv2协议的Python库
37 3
|
3月前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【9月更文挑战第23天】在本文中,我们将探索如何通过编写Python脚本来自动化常见的系统管理任务,从而提升效率并减少人为错误。文章将介绍基础的Python编程概念、实用的库函数,以及如何将这些知识应用于创建有用的自动化工具。无论你是新手还是有经验的系统管理员,这篇文章都将为你提供有价值的见解和技巧,帮助你在日常工作中实现自动化。
|
3月前
|
运维 监控 安全
自动化运维:使用Python脚本简化日常任务
【9月更文挑战第21天】在快速迭代的软件开发环境中,运维工作往往因为重复性高、易出错而被诟病。本文将介绍如何通过编写简单的Python脚本来自动化这些日常任务,从而提升效率和减少错误。我们将以实际案例为基础,展示如何从零开始构建一个自动化脚本,并解释其背后的原理。文章旨在启发读者思考如何利用编程技能来解决工作中的实际问题,进而探索技术与日常工作流程结合的可能性。
|
3月前
|
Unix Linux 网络安全
python中连接linux好用的模块paramiko(附带案例)
该文章详细介绍了如何使用Python的Paramiko模块来连接Linux服务器,包括安装配置及通过密码或密钥进行身份验证的示例。
150 1
|
3月前
|
运维 监控 Python
自动化运维:使用Python脚本实现日常任务
【9月更文挑战第24天】在现代的软件开发周期中,运维工作扮演着至关重要的角色。本文将介绍如何利用Python编写简单的自动化脚本,来优化和简化日常的运维任务。从备份数据到系统监控,Python的易用性和强大的库支持使其成为自动化运维的首选工具。跟随这篇文章,你将学习如何使用Python编写自己的自动化脚本,提高运维效率,减少人为错误,并最终提升整个开发流程的质量。

热门文章

最新文章