在我的fabfile中,我已将env.use_ssh_config设置为True。每当我运行fabfile时,它将从ssh配置中获得正确的hostnameuser,但不是正确的密钥。它将随机通过我的密钥(全部存储在〜/ .ssh /中),要求我输入所有密钥的密码,直到找到正确的密钥。

唯一的面料给我带来了这个问题。在fabfile中将scp作为local命令运行使用正确的密钥。

Host example
    HostName example.com
    User elssar
    IdentityFile ~/.ssh/id_example
    PreferredAuthentications publickey


我的ssh配置中的条目如下所示。

我正在使用Fabric 1.10.1Paramiko 1.14.1Python 2.7.3Ubuntu 12.04

编辑-架构存储库中存在一个相关的未解决问题-https://github.com/fabric/fabric/issues/1282

编辑-我的fabfile的基本结构以及运行方式

from fabric.api import env, run

def do_something():
    run("echo test")

def setup(host):
    env.hosts = [host]


# command
fab server:hostname do_something

最佳答案

我尝试检查设置;这是我要调试的:

>>> from fabric.network import key_filenames
>>> key_filenames()
[]
>>> from fabric.state import env
>>> env.use_ssh_config = True
>>> env.host_string = 'salt-states'
>>> key_filenames()
['/Users/damien/.ssh/salt.rsa.priv']


更新:您可以更新fabfile来执行任务:

from fabric.api import env, run
from fabric.network import key_filenames

def do_something_debug():
    env.use_ssh_config = True
    print key_filenames()
    run("echo test")

def server(host):
    env.hosts = [host]


然后运行命令

fab server:hostname do_something_debug

08-04 23:41