配置

基础

结构的配置系统的核心(与结构的其余部分一样)依赖于调用功能,即 invoke.config.Config (从技术上讲,是轻量级的子类, fabric.config.Config )有关这意味着什么的实际详细信息,请参阅:配置结构的行为。 Invoke's configuration documentation .

与该文件的主要区别如下:

  • 所寻求的配置文件路径都是命名的 fabric.* 而不是 invoke.* -例如 /etc/fabric.yml 而不是 /etc/invoke.yml~/.fabric.py 而不是 ~/.invoke.py 等。

  • 除了 Invoke's own default configuration values ,fabric自己合并了一些内容,例如ssh的默认端口号是22。见 默认配置值 有关详细信息。

  • Fabric具有加载ssh配置文件的功能,并将自动在每个配置上创建(或更新)配置子树。 Connection basis,为特定主机加载解释的ssh配置(因为ssh配置文件只有通过这样的镜头才有用)。见 装载和使用 ssh_config 文件夹 .

  • Fabric计划提供一个框架来管理每个主机和每个主机集合的配置细节和覆盖,尽管这还没有实现(它将类似于 env.hostsenv.roles Fabric 结构1.x)。

    • 此功能将补充前面描述的ssh配置加载的功能;我们预计大多数用户都希望通过ssh配置文件尽可能多地配置,但并非所有结构设置都具有 ssh_config 类似的,也不是所有用例都能整齐地放入这些文件中。

默认配置值

调用级别默认值的重写

  • run.replace_envTrue ,而不是 False ,以便远程命令在“干净”的空环境中运行,而不是继承当前进程环境的副本。

    这是出于安全目的:默认情况下远程泄漏本地环境数据是不卫生的。它还与openssh的行为兼容。

    参见

    下面的警告 paramiko.channel.Channel.set_environment_variable .

调用级别默认值的扩展

  • runners.remote :在invoke中, runners 树有一个子项, local (映射到) Local )Fabric添加了这个新的子项, remote ,映射到 Remote .

由结构定义的新默认值

注解

这些设置中的大多数在 Connection ,如果它们只需要对每个连接进行修改。

警告

其中许多还可以通过 ssh_config files . 这些值优先于通过核心配置定义的值。 ,因此请确保您知道是否正在加载此类文件(或 disable them to be sure

  • connect_kwargs :关键字参数 (dict )给予 SSHClient.connect 什么时候? Connection 执行该方法调用。这是许多与ssh相关的选项的主要配置向量,例如选择私钥、切换ssh代理的转发等。默认值: {{}} .

  • forward_agent :是否尝试将本地ssh身份验证代理转发到远程端。违约: False (与openssh中相同。)

  • gateway :用作 gateway 克沃格 Connection . 可能是该参数接受的任何值。违约: None .

  • load_ssh_configs :是否自动查找 SSH config files . 什么时候? False ,不自动加载。违约: True .

  • port :使用的TCP端口号 Connection 未另行指定的对象。违约: 22 .

  • ssh_config_path :运行时ssh配置路径;请参阅 装载和使用 ssh_config 文件夹 . 违约: None .

  • timeouts :各种超时,特别是:

    • connect :连接超时,以秒为单位;默认为 None ,表示永远没有超时/阻塞。
  • user :给遥控器的用户名 sshd 连接时。默认:您的本地系统用户名。

装载和使用 ssh_config 文件夹

如何加载文件

Fabric使用Paramiko的ssh配置文件机制来加载和解析 ssh_config -格式化文件(遵循OpenSSH的行为Re:如果可能,加载哪些文件):

  • 已分析的 SSHConfig 对象可以给予 Config.__init__ 通过其 ssh_config 关键字参数;如果给定此值,则不会加载任何文件,即使它们存在。

  • 运行时文件路径可以通过配置本身指定,作为 ssh_config_path 键;这样的路径将加载到新的 SSHConfig 对象位于 Config.__init__ 其他文件也不会被查出。

    • 它将由 fab CLI工具如果 --ssh-config 给出了标志。
  • 如果没有提供运行时配置(对象或路径) Config.__init__ ,将自动查找和加载 ~/.ssh/config 和/或 /etc/ssh/ssh_config ,如果它们存在(并且按这个顺序)。

    注解

    两个文件中存在的规则将导致用户级文件“获胜”,因为始终使用查找过程中找到的第一个规则。

  • 如果上述向量都没有生成ssh配置数据,则为空 SSHConfig 是最终的结果。

  • 无论对象是如何生成的,它都将作为 Config.base_ssh_config .

Connection 的使用 ssh_config 价值观

Connection 对象公开其配置的ssh数据的每主机“视图”(通过 lookup 作为 Connection.ssh_config . Connection 它本身引用以下小节中描述的这些值,通常作为适当配置键或参数的简单默认值。 (portforward_agent 等)

除非另有规定,否则这些值将覆盖相同键的常规配置值,但它们本身可能会被覆盖 Connection.__init__ 参数。

以A为例 ~/.fabric.yaml

user: foo

没有其他配置, Connection('myhost') 连接为 foo 用户。

如果我们还有 ~/.ssh/config ::

Host *
    User bar

然后 Connection('myhost') 连接为 bar (ssh配置胜于结构配置。)

然而 在这两种情况下, Connection('myhost', user='biz') 将连接为 biz .

注解

以下部分使用大写版本的 ssh_config 更容易与 man ssh_configbut 实际 SSHConfig 数据结构被规范化为小写键,因为ssh配置文件在技术上不区分大小写。

连接参数

  • Hostname :替换的原始值 host (保存为 .original_host
  • Port :提供 port 配置选项/参数。
  • User :提供 user 配置选项/参数。
  • ConnectTimeout :设置 timeouts.connect 配置选项/ timeout 参数。

代理

  • ProxyCommand :为提供默认(字符串)值 gateway .
  • ProxyJump :供应默认值 (Connection 价值 gateway .
    • 嵌套样式 ProxyJump ,即 user1@hop1.host,user2@hop2.host,... ,将生成一个适当的嵌套系列 gateway 引擎盖下的值-就像用户手动指定的值一样 Connecton(..., gateway=Connection('user1@hop1.host', gateway=Connection('user2@hop2.host', gateway=...))) .

注解

如果两个都是为给定主机指定的, ProxyJump 将超越 ProxyCommand . 这与OpenSSH稍有不同,在OpenSSH中,指令的加载顺序决定了哪一个成功。这样做(我们将配置视为字典结构)需要额外的工作。

认证

  • ForwardAgent :控制的默认行为 forward_agent .
  • IdentityFile :附加到 key_filename 关键在 connect_kwargs (类似于 --identity

禁用(大多数) ssh_config 加载

需要更严格控制环境配置方式的用户可能希望禁用系统/用户级ssh配置文件的自动加载;这可以防止难以预料的错误,例如新用户的 ~/.ssh/config 重写在常规配置层次结构中设置的值。

为此,只需设置顶级配置选项 load_ssh_configsFalse .

注解

更改此设置会 not 禁止加载运行时级配置文件(例如通过 -F )如果用户明确告诉我们加载这样的文件,我们假设他们知道他们在做什么。