Python Fabric ssh 配置解读


Fabric 2.4简介:

Fabric is a high level Python (2.7, 3.4+) library designed to execute shell commands remotely over SSH, yielding useful Python objects in return.

简单说就是一个基于 ssh 执行远程 shell 命令返回一个 python 对象的一个 python 库。

Fabric 的大部分配置都是对 ssh 的配置, 而它的 ssh 协议是通过另一个 开源库 Paramiko 实现, 所以最终这些配置都会转换成 Paramiko 的 ssh 配置。

先看下官方的例子:

result = Connection('web1').run('hostname')

建立一个到 web1 这台服务器的一个 ssh 连接, 然后执行 hostname , 返回一个这次连接执行结果 python 对象。

这里就来到了本文的主题, 他是怎样连接对应的 host 也就是 Web1 的。

每一个 Fabric 的 Connection 都有一个 SSHClient 实例(Paramiko 中实现), 然后通过这个实例来连接上 Web1, 所以就需要 fabric 来提供这个实例连接所需要的必要参数, 这个是 SSHClient 连接的参数。

def connect(
self,
hostname,
port=SSH_PORT,
username=None,
password=None,
pkey=None,
key_filename=None,
timeout=None,
allow_agent=True,
look_for_keys=True,
compress=False,
sock=None,
gss_auth=False,
gss_kex=False,
gss_deleg_creds=True,
gss_host=None,
banner_timeout=None,
auth_timeout=None,
gss_trust_dns=True,
passphrase=None,
):

Connection 是继承自 invoke 中的 Context, 就字面意思来说是提供这个 SSHClient 连接的上下文, 也就是 SSHClient 所需的参数。

Connection 中上下文中的参数又会通过 Fabric Config来提供, Connection 实例创建的时候会生成 Fabric 自己的 Config 或将外部传入 config 对象转换成 Fabric Config 对象。

Fabric Config 有一个对使用者来说比较有用的一个静态方法,

 @staticmethod
def global_defaults():
defaults = InvokeConfig.global_defaults()
ours = {
# New settings
"connect_kwargs": {},
"forward_agent": False,
"gateway": None,
"load_ssh_configs": True,
"port": 22,
"run": {"replace_env": True},
"runners": {"remote": Remote},
"ssh_config_path": None,
"tasks": {"collection_name": "fabfile"},
# TODO: this becomes an override/extend once Invoke grows execution
# timeouts (which should be timeouts.execute)
"timeouts": {"connect": None},
"user": get_local_user(),
}
merge_dicts(defaults, ours)
return defaults

这个其实是 Fabric 对 InvokeConfig 默认配置的一个扩展, 具体的可以看代码, 我们可通过覆盖这个方法, 来实现我们自己的默认或者说全局配置, 然后把这个配置传给 Connection, 为 Connection 中的连接提供必要的参数。

from fabric import Config as FabricConfig
from invoke.config import merge_dicts class MyConfig(FabricConfig):
@staticmethod
def global_defaults():
defaults = FabricConfig.global_defaults()
my = {
"connect_kwargs": {"password":"123456"},
"port": 22,
"ssh_config_path": "./ssh_config",
"load_ssh_configs": False,
"user": "root",
}
merge_dicts(defaults, my)
return defaults

几个参数的意义:

  • connect_kwargs: 为 ssh connect 提供中的参数
  • port: ssh 连接的端口
  • ssh_config_path: ssh_config 的路径, 配置后只会读取这个路径 ssh_config 的配置, fabric 扩展的参数
  • load_ssh_configs: 没有配置 ssh_config_path 的时候, 是否读取系统和用户配置
  • user: 连接的用户

这些都是默认配置, 优先级是最低的, ssh_config_path 中配置的优先级会覆盖掉默认默认配置。 所以官方例子中 Web1 的配置来源可能有三种,ssh_config_path 中的配置, 系统的 ssh_config(/etc/ssh_config), 以及用户的 ssh_config(~/.)。

一个值得一提的点是:

当传入的 config 是一个对象实例的时候, 是不会再创建 Config 对象的,也就是说可以很多个 Connection 共用一个 Config, 这在连接比较多的服务器的时候很有用。

Python Fabric ssh 配置解读的更多相关文章

  1. [Python Fabric] [SSH] Mac OS X 10.9 + Vagrant虚拟环境使用Python Fabric进行SSH远程登录的简单实验

    1. ssh客户端生成key $ Generating public/private rsa key pair. Enter file in which to save the key (/Users ...

  2. Python Fabric远程自动部署简介

    Fabric是一个Python(2.5-2.7)库,用于简化使用SSH的应用程序部署或系统管理任务. 它提供的操作包括:执行本地或远程shell命令,上传/下载文件,以及其他辅助功能,如提示用户输入. ...

  3. Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载

    Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载 2018年5月26日 19:03 阅读 375 评论 7 我本地和服务器的连接一直使用的是 Xshell 5,而在与服务 ...

  4. 使用python fabric搭建RHEL 7.2大数据基础环境以及部分优化

    1.使用python fabric进行Linux基础配置 使用python,可以让任何事情高效起来,包括运维工作,fabric正式这样一套基于python2的类库,它执行本地或远程shell命令提供了 ...

  5. Python Fabric模块详解

    Python Fabric模块详解 什么是Fabric? 简单介绍一下: ​ Fabric是一个Python的库和命令行工具,用来提高基于SSH的应用部署和系统管理效率. 再具体点介绍一下,Fabri ...

  6. python通过SSH登陆linux并操作

    使用python通过SSH登陆linux并操作 用的昨天刚接触到的库,在windows下通过paramiko来登录linux系统并执行了几个命令,基本算是初试成功,后面会接着学习的. 代码: > ...

  7. mysql+ssh 配置(转载)

    Mysql+ssh配置 一.Linux平台间mysql+ssh配置 本机地址为:192.168.189.133 mysql服务器地址为:192.168.189.139 linux命令行下使用ssh命令 ...

  8. python下ssh的简单实现

    python下的ssh都需要借助第三方模块paramiko来实现,在使用前需要手动安装. 一.python实现ssh (1) linux下的ssh登录 root@ubuntu:~# ssh morra ...

  9. Python中下划线---完全解读(转)

      Python中下划线---完全解读 Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用’from module import *’导入 __xxx__ 系统定义名字 __xxx ...

随机推荐

  1. 以太坊系列之十二: solidity变量存储

    solidity中变量的存储 变量存储主要分为两个区域,一个是storage(对应指定是SLOAD,SSTORE),一个是Memory(MLOAD,MSTORE), 这和普通编程语言的内存模型是不一样 ...

  2. html5 video微信浏览器视频不能自动播放

    html5 video微信浏览器视频不能自动播放 一.微信浏览器(x5内核): 1.不能自动播放 2.全屏 3.最顶层(z层的最顶层) 二.ios系统解决方案:(无phone手机未测试) <au ...

  3. [Algorithm]图

    一.图的算法 邻接矩阵表示的数据结构 1 #define INFINITY INT_MAX // 无穷大 2 #define MAX_VERTEX_NUM 20 // 限制顶点最大数值为20个 3 # ...

  4. NSEnumerator迭代器

    前言 Xcode 7 对系统中常用的一系列容器类型都增加了泛型支持(),有了泛型后就可以指定容器类中对象的类型了. 假如向泛型容器中加入错误的对象,编译器会报警告. __covariant:协变性,子 ...

  5. 趣图:TCP 与 UDP 的差别

      趣图:程序猿和运维狗的工作日常…… 趣图:Java 和 PHP 之间的战斗

  6. 可以避免的10大IT面试误区

    在所有的面试过程当中,很多面试者都普遍犯了这样一个错误——由于对面试准备的不足,所以对于应聘公司的背景,以及一些最基本的信息都缺乏了解,有些面试者甚至对要面试的公司毫无所知.这些数据并不是空穴来风,A ...

  7. Python3入门之软件安装

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 最近将我的Python笔记整理下,希望能对他人有所帮助,这是第一课,安装入门篇: windows下安装Python 1.下载,从这里下载:[下载链 ...

  8. Nagios监控平台搭建及配置文件详解

    Nagios是一款开源的免费网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员, ...

  9. Elements in iteration expect to have 'v-bind:key' directives错误的解决办法

    一.错误如下 [eslint-plugin-vue][vue/require-v-for-key]Elements in iteration expect to have 'v-bind:key' d ...

  10. 4.jQuery和DOM 对象之间的相互转换

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...