如何在Fabric库代码中全局禁用load_ssh_configs?
如何在Fabric中全局禁用加载~/.ssh/config配置文件
你可以通过直接修改Fabric Config类的全局默认配置来实现全局禁用,无需每次创建Connection时手动传参,这是最简洁的方法:
from fabric import Config # 修改全局默认配置,禁用ssh config加载 Config._global_defaults['load_ssh_configs'] = False # 后续创建的所有Connection都会自动应用这个配置 c = fabric.Connection('host1')
为什么之前的尝试无效?
- 直接赋值
load_ssh_configs = False:这只是创建了一个独立全局变量,和Fabric的配置体系完全无关,自然不会生效。 - 创建Config实例后再修改
load_ssh_configs:Config初始化时就已经根据默认的load_ssh_configs=True完成了ssh配置加载,后续修改无法回溯这一步操作。 - 修改
Config.global_defaults()返回的字典:这个方法返回的是全局默认配置的副本,修改副本不会影响Fabric实际使用的全局默认值。
对比你之前的可行方案
- 每次传
config=Config(lazy=True):虽然可行,但需要重复传参,对于大量Connection实例的场景不够高效。 - 手动传入空的paramiko SSHConfig:操作冗余,没必要绕开Fabric的配置体系直接操作底层依赖。
临时切换配置的补充
如果需要临时禁用后恢复默认行为,可以先保存原配置值,操作完成后再还原:
from fabric import Config # 保存原始配置值 original_load_setting = Config._global_defaults['load_ssh_configs'] # 临时禁用ssh config加载 Config._global_defaults['load_ssh_configs'] = False # 执行需要禁用配置加载的操作 c = fabric.Connection('host1') # ... # 恢复原始配置 Config._global_defaults['load_ssh_configs'] = original_load_setting
内容的提问来源于stack exchange,提问作者Robert Siemer
相关产品推荐
相关产品推荐

