Python Fabric ssh 配置解读
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 配置解读的更多相关文章
- [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 ...
- Python Fabric远程自动部署简介
Fabric是一个Python(2.5-2.7)库,用于简化使用SSH的应用程序部署或系统管理任务. 它提供的操作包括:执行本地或远程shell命令,上传/下载文件,以及其他辅助功能,如提示用户输入. ...
- Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载
Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载 2018年5月26日 19:03 阅读 375 评论 7 我本地和服务器的连接一直使用的是 Xshell 5,而在与服务 ...
- 使用python fabric搭建RHEL 7.2大数据基础环境以及部分优化
1.使用python fabric进行Linux基础配置 使用python,可以让任何事情高效起来,包括运维工作,fabric正式这样一套基于python2的类库,它执行本地或远程shell命令提供了 ...
- Python Fabric模块详解
Python Fabric模块详解 什么是Fabric? 简单介绍一下: Fabric是一个Python的库和命令行工具,用来提高基于SSH的应用部署和系统管理效率. 再具体点介绍一下,Fabri ...
- python通过SSH登陆linux并操作
使用python通过SSH登陆linux并操作 用的昨天刚接触到的库,在windows下通过paramiko来登录linux系统并执行了几个命令,基本算是初试成功,后面会接着学习的. 代码: > ...
- mysql+ssh 配置(转载)
Mysql+ssh配置 一.Linux平台间mysql+ssh配置 本机地址为:192.168.189.133 mysql服务器地址为:192.168.189.139 linux命令行下使用ssh命令 ...
- python下ssh的简单实现
python下的ssh都需要借助第三方模块paramiko来实现,在使用前需要手动安装. 一.python实现ssh (1) linux下的ssh登录 root@ubuntu:~# ssh morra ...
- Python中下划线---完全解读(转)
Python中下划线---完全解读 Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用’from module import *’导入 __xxx__ 系统定义名字 __xxx ...
随机推荐
- 死磕Java之聊聊LinkedList源码(基于JDK1.8)
工作快一年了,近期打算研究一下JDK的源码,也就因此有了死磕java系列 LinkedList 是一个继承于AbstractSequentialList的双向链表,链表不需要capacity的设定,它 ...
- rsync服务搭建--2018.5.8 [优化后最终版]
2018年5月8日 22:09:38 第一步配置基础环境(按照自己的规划配置并非每人的环境都一致) 第一台服务器(RSYNC服务器): rsync外网地址:10.0.0.41 rsync内网地址:1 ...
- 「BZOJ 3218」 a + b Problem
题目链接 戳我 \(Solution\) 题目为什么是\(a\ +\ b\ Problem\)啊?这和题面半毛钱关系都没有. 现在来讲一下这题的解法吧,我们首先看看没有奇怪的方格这一个条件吧. 其实没 ...
- C# WPF Webbrowser 强制所有网页链接在同一页面打开
只要搞懂Winform的 WPF稍微改一改就可以了 主类:负责跳转的 using System; using System.Collections.Generic; using System.Com ...
- linux系统使用sh文件传参数给matlab程序
linux系统下使用sh文件传参数给matlab程序 (1)编写sh文件 程序以下面的行开始(必须在文件的第一行): #!/bin/sh 定义需要传递的参数,用双引号引起,参数之间使用逗号或分 ...
- EF进阶篇(一)——概述
前言 以前在ITOO里面和图书馆项目开发的时候,采用的这个技术,但是总是对上下文那里不是特别清楚.上下文这个概念很是模糊,所以这次再次拿起这个技术点儿,然后复习了一遍,发现我以前想的好简单. 内容 E ...
- PS基本操作汇总(持续更新)
一.放大缩小图片:ctrl+/- 二.缩小gif:ps时打开后,web格式保存,里面点出优化面板,选gif格式,颜色数减小,如128,损耗30,图片大小也可调整,比如调整为50%,点击预览,可在浏览器 ...
- C# Winform下一个热插拔的MIS/MRP/ERP框架(多语言方案)
个别时候,我们需要一种多语种切换方案. 我的方案是这样的: 1.使用文本文本存储多语言元素,应用程序启动时加载到内存表中: 2.应用程序启动时从配置文件加载语种定义: 3.所有窗体继承自一个Base基 ...
- luoguP4868 Preprefix sum
https://www.luogu.org/problemnew/show/P4868 线段树上加等差数列,基础区间修改单点查询 等差数列具有可加性,当在同一段区间内时,首项相加公差相加即可 #inc ...
- 月薪3万+的大数据人都在疯学Flink,为什么?
身处大数据圈近5年了,在我的概念里一直认为大数据最牛的两个东西是Hadoop和Spark.18年下半年的时候,我突然发现身边很多大数据牛人都是研究学习Flink,甚至连Spark都大有被冷落抛弃的感觉 ...