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 ...
随机推荐
- LNMP(linux+nginx+mysql+php)服务器环境配置【转载】
本文转载自 园友David_Tang的博客,如有侵权请联系本人及时删除,原文地址: http://www.cnblogs.com/mchina/archive/2012/05/17/2507102.h ...
- const 迭代器和 const_iterator (vector/set/map)
vector: 如同一般复合类型一样,vector 迭代器也可以声明成: const vector<int>::iterator it1 = v.begin(); vector<in ...
- 洛谷P4518 [JSOI2018]绝地反击(计算几何+二分图+退流)
题面 传送门 题解 调了咱一个上午-- 首先考虑二分答案,那么每个点能够到达的范围是一个圆,这个圆与目标圆的交就是可行的区间,这个区间可以用极角来表示 首先,如果我们知道这个正\(n\)边形的转角,也 ...
- #首行输入数n,接下来输入n行数,以空格隔开
#首行输入数n,接下来输入n行数,以空格隔开 n = int(raw_input())# print nL = []for i in range(n): L.append([int(x) for x ...
- Python3之requests模块
Python标准库中提供了:urllib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务. 发送G ...
- JsonToHtml
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- update 多表链接
update Aset A.shl = A.shl - B.shl from retmxls A,daysphz Bwhere A.spid = B.spid and A.fdbs = B.fdbs ...
- 吴裕雄 python 机器学习——密度聚类DBSCAN模型
import numpy as np import matplotlib.pyplot as plt from sklearn import cluster from sklearn.metrics ...
- liunx 安装 phpstudy
phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Tengine/Lighttpd/IIS7/8/6 phpStudy for Linux 支持Apache/Ng ...
- sharepoint_study_2
描述:向SharePoint中批量添加用户 解决:原文地址:http://bbs.winos.cn/thread-89236-1-1.html 一般情况下,要想登录SharePoint server ...