Python自动化运维快速入门(第2版)_郑征_AZW3_MOBI_EPUB_PDF_电子书(无页码)_郑征
内容节选
8.1介绍几个重要的类 8.1.1 通道类 通道(Channel)类是对SSH2 Channel的抽象类,是跨SSH传输的安全隧道。隧道的作用类似于套接字,并且与Python套接字API十分类似。因为SSHv2协议有一种流动窗口控制机制,如果停止从一个通道读取数据,并且这个通道的缓冲区已满,那么服务器将不会往此通道发送任何数据,但是这并不会影响同一传输上的其他通道(单个传输上的所有通道都是独立的流量控制通道)。类似地,如果服务器没有读取客户端发送的数据,那么客户端的发送调用可能会阻塞,除非设置了超时,这与正常的网络套接字完全一致。通道类的实例常用于上下文管理。 通道类提供的方法中常用的有以下几个。· close() :关闭Channel,关闭后任何对Channel的读写操作均会失败。远程节点将不能接收数据。Channel在传输完成或垃圾收集时自动关闭。 · exec_command(*args,**kwds):在服务端执行命令,如果服务端许可,则Channel将直接连接所执行命令的标准输入、标准输出及标准错误输出。当命令执行完毕后,channel将被关闭,并不再复用。如果想执行另一个命令,则需要新开一个Channel。当请求服务器被拒绝或Channel被关闭时,将抛出SSHException异常。 · exit_status_ready():该方法检查服务端进程是否退出,如果进程已经执行完并退出,则返回True,否则返回False。当程序不想在recv_exit_status方法中阻塞时,可以用此方法来拉取进程状态。 · recv_exit_status():从服务器上的进程返回退出状态。这对于检索exec_command的结果非常有用。如果命令还没有完成,这个方法将一直等到完成,或者直到通道关闭。如果exec_command运行结束,而服务器没有提供退出状态,则返回-1。 8.1.2 传输类 传输(Transport)类是核心协议的实现类,SSH传输连接到流(通常是套接字),协商加密的会话,进行身份验证,然后在会话之间创建流隧道(称为通道)。多个通道可以跨单个会话进行多路复用。Transport类的构造函数如下:__init__(sock, default_window_size=2097152, default_max_packet_size=32768,gss_kex=False, gss_deleg_creds=True) 构造函数在现有套接字或类似套接字的对象上创建新的SSH会话。它只会创建传输对象,并不启动SSH会话。使用connect或start_client方法启动客户端会话,或者使用start_server方法启动服务器会话。参数sock为一个套接字对象或类套接字对象,如果sock不是一个真正的套接字对象,那么它至少需要有以下方法。· send(str) :写入一定长度的字节数据到流中,返回写入流的字节数,如果流被关闭,则返回0或抛出EOFError异常。 · recv(int):从流中读取固定字节的数据,返回读取的字符串,如果流被关闭,则返回0或抛出EOFError异常。 · close():关闭对象。 · settimeout(n):设置I/O操作的超时时间。 为了便于使用,sock参数还可以传入元组(主机字符串,端口),一个套接字将连接到这个地址和端口并用于通信,使用方法如下所示。trans = paramiko.Transport(('192.168.195.129', 22)) 参数default_window_size设置默认的传输窗口的大小,default_max_packet_size设置默认的传输数据包的大小,这两个参数保持默认值与OpenSSH代码库中的值相同,并且经过严格测试,使用时一般不需要修改。 传输类提供的connect方法,其函数原型为:connect(hostkey=None, username='', password=None, pkey=None, gss_host=None,gss_auth=False, gss_kex=False, gss_deleg_creds=True, gss_trust_dns=True) 本方法启动一个SSH2会话,可以选择使用公钥或用户名、密码进行身份验证。使用方法如下:# 方法一 trans = paramiko.Transport(('192.168.195.129', 22)) # 建立连接,使用用户名及密码进行身份验证 trans.connect(username='aaron', password='aaron') #方法二 pkey = paramiko.RSAKey.from_private_key_file('/home/......
- 信息
- 内容简介
- 前言
- 第1章 自动化运维与Python
- 1.1 自动化运维概述
- 1.2 初识Python
- 1.3 Python环境搭建
- 1.4 开发工具介绍
- 1.5 Python基础语法
- 1.6 多个例子实战Python编程
- 1.7 pip工具的使用
- 第2章 基础运维技能
- 2.1 文本处理
- 2.2 系统信息监控
- 2.3 文件系统监控
- 2.4 执行外部命令subprocess
- 2.5 日志记录
- 2.6 搭建FTP服务器与客户端
- 2.7 邮件提醒
- 2.8 微信提醒
- 第3章 实战多进程
- 3.1 创建进程的类Process
- 3.2 进程并发控制之Semaphore
- 3.3 进程同步之Lock
- 3.4 进程同步之Event
- 3.5 进程优先级队列Queue
- 3.6 多进程之进程池Pool
- 3.7 多进程之数据交换Pipe
- 第4章 实战多线程
- 4.1 Python多线程简介
- 4.2 多线程编程之threading模块
- 4.3 多线程同步之Lock(互斥锁)
- 4.4 多线程同步之Semaphore(信号量)
- 4.5 多线程同步之Condition
- 4.6 多线程同步之Event
- 4.7 线程优先级队列(queue)
- 4.8 多线程之线程池pool
- 第5章 实战协程
- 5.1 定义协程
- 5.2 并发
- 5.3 异步请求
- 第6章 自动化运维工具Ansible
- 6.1 Ansible的安装
- 6.2 Ansible配置
- 6.3 inventory文件
- 6.4 Ansible ad-hoc模式
- 6.5 Ansible playbooks模式
- 第7章 定时任务模块APScheduler
- 7.1 安装及基本概念
- 7.2 配置调度器
- 7.3 启动调度器
- 7.4 调度器事件监听
- 第8章 执行远程命令的工具Paramiko
- 8.1 介绍几个重要的类
- 8.2 Paramiko的使用
- 第9章 分布式任务队列Celery
- 9.1 Celery简介
- 9.2 安装Celery
- 9.3 安装RabbitMQ或Redis
- 9.4 第一个Celey程序
- 9.5 第一个工程项目
- 9.6 Celery架构
- 9.7 Celery队列
- 9.8 Celery Beat任务调度
- 9.9 Celery远程调用
- 9.10 监控与管理
- 第10章 任务调度神器Airflow
- 10.1 Airflow简介
- 10.2 Airflow安装与部署
- 10.3 Airflow配置MySQL知识库和LocalExecutor
- 10.4 Airflow配置Redis和CeleryExecutor
- 10.5 Airflow任务开发Operators
- 10.6 Airflow集群、高可用部署
- 第11章 Docker容器技术介绍
- 11.1 Docker概述
- 11.2 Docker解决什么问题
- 11.3 Docker的安装部署与使用
- 11.4 卷的概念
- 11.5 数据卷共享
- 11.6 自制镜像并发布
- 11.7 Docker网络
- 11.8 Docker小结
- 第12章 主流自动化配置工具
- 12.1 配置引擎CFEngine
- 12.2 自动化运维工具Chef
- 12.3 Puppet
- 12.4 SaltStack
- 第13章 开源配置管理平台搭建
- 13.1 open-cmdb
- 13.2 蓝鲸配置平台
- 第14章 统一监控平台Zabbix
- 14.1 Zabbix主要功能
- 14.2 Zabbix平台的技术术语
- 14.3 Zabbix的主要模块
- 14.4 Zabbix的安装要求
- 14.5 Zabbix的安装:从安装包进行安装
- 14.6 Zabbix的安装:从容器进行安装
- 第15章 运维开发相关技术
- 15.1 前端开发之Vue.js
- 15.2 后端接口开发之FastAPI
- 15.3 WebSocket开发
- 第16章 DevOps方法论
- 16.1 什么是DevOps
- 16.2 DevOps成功的关键
- 16.3 DevOps最常用的10个工具
- 16.4 DevOps能为企业带来哪些收益