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, 这在连接比较多的服务器的时候很有用。

原文地址:https://www.cnblogs.com/nowg/p/9936701.html

时间: 2024-10-14 11:19:22

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

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

1. ssh客户端生成key 1 $ ssh-keygen -t rsa -b 4096 2 Generating public/private rsa key pair. 3 Enter file in which to save the key (/Users/(username)/.ssh/id_rsa): vagrantid_rsa 4 Enter passphrase (empty for no passphrase): 5 Enter same passphrase again: 6

利用Python Fabric配置主机间SSH互信和添加公钥

本文主要讲述如何利用Python的Fabric模块编写一个脚本用于配置多个主机间SSH互信以及如何将管理员自己的公钥批量添加到多个主机中. 脚本说明 该脚本只提供如题所述的少量功能,用于帮助熟悉Python的Fabric和SSH几项简单的基本配置,原本的目的是想通过Python和Fabric实现对主机进行一些批量操作,如完成主机的初始化等.因为SSH的配置具有通用性和必要性,所以便有了此文,希望对Linux运维和使用Python.Fabric自动化部署感兴趣的人有所帮助. 该脚本将继续维护,直至

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

1.使用python fabric进行Linux基础配置 使用python,可以让任何事情高效起来,包括运维工作,fabric正式这样一套基于python2的类库,它执行本地或远程shell命令提供了操作的基本套件(正常或通过sudo)和上传/下载文件,如提示用户输入运行辅助功能,或中止执行. 用Python3开发的部署工具叫fabric3:fabric3,和fabric一样最大特点是不用登录远程服务器,在本地运行远程命令,几行Python脚本就可以轻松部署. 典型用途包括创建一个包含一个或多个

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

Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载 2018年5月26日 19:03 阅读 375 评论 7 我本地和服务器的连接一直使用的是 Xshell 5,而在与服务器进行文件操作的时候使用的是 Xshell 推荐安装的一个工具 Xftp 5,然而,昨天自己想着从服务器下载备份好的的数据库文件到本地的时候发现这个文件传输工具居然过期不能用了,好气啊!于是没办法(机智如我)只好用 Python 来实现 SSH 的连接,顺便从服务器批量下载一些文件,实现自动化. 项

Python通过SSH隧道链接Kafka

Python通过SSH隧道链接Kafka 最近有一个需求需要连接Kafka,但是它只允许内网链接,但是有些服务跑在服务器上总没有在我本机调试起来爽,毕竟很多开发工具还是在客户端机器上用的熟练.于是我想到了通过SSH连接Kafka,至于怎么连接可以通过XShell.Proxifier等等,由于个人还是觉得自己写更灵活,所以我是用Python里的sshtunnel写的(有需要后面我也可以分享下),个人喜好啊,你们自行选择. 由于笔者这里的Kafka环境使用Zookeeper做分布式部署,有多个bro

Mysql高可用 - Fabric安装配置

Fabric简介 mysql fabric是oracle推出的,它可以简化管理mysql集群,提供两大特性: 1  通过故障检测和故障转移提供高可用 2  通过自动数据分片实现可扩展性 Fabric前提条件 MySQL server 5.6.10 or later for Fabric MySQL servers.(fabric是基于mysql 5.6的新特性gtid实现的) MySQL server 5.6.x or later for the backing store. Python 2

python通过SSH登陆linux并操作

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

SSH配置环境都正常,但是每次执行到Action中的方法时就中断了,而且不报任何错误

SSH配置环境都正常,但是每次执行到Action中的方法时就不执行课,而且不报任何错误.Action中的方法封装的是业务层,业务层封装DAO层,检查了一天才发现错误在哪. 在applicationContext.xml中报了一个异常,如: Multiple annotations found at this line: - Exception 'com/dao/StudentDAO : Unsupported major.minor version 51.0' - Exception 'com/

用Notepad++写python的小配置

在上一家公司的时候,写python,用的emeditor,由于是公司的电脑,都是配置好的,写python还是比较顺手,现在离开后,一直用notepad++,想转到notepad++来写python的代码,遂研究了下,配置了自己的Notepad++的python环境. 首先你要安装python.notepad++,这个去官网下载安装就行,不多赘言. 安装完基本工具后,开始配置Notepad++了. 1.点击“运行”-“运行”,弹出一个对话框,输入命令 cmd /k C:\Python27\pyth