如何让 Fabric 失败而不是 "pubkey denied" 的密码提示?

How to get Fabric to fail instead of password prompt for "pubkey denied"?

当我使用错误的 SSH 密钥使用 Fabric 连接到主机时,它会提示输入密码而不是失败。

这是 SSH 的输出:

$ ssh -i 'ssh_key_file' user@host
Permission denied (publickey,keyboard-interactive).

下面是 Fabric 对以下文件所做的操作:

# fabfile.py
from fabric.api import env, execute, run, task

env.hosts = ['host']
env.key_filename = 'ssh_key_file'

@task
def do_something():
    run('echo hello')

execute(do_something)

织物的输出:

$ python fabfile.py
[104.236.30.93] Executing task 'do_something'
[104.236.30.93] run: echo hello
[104.236.30.93] Login password for 'deploy':

如何让 Fabric 立即失败,最好是显示 Permission denied (publickey,keyboard-interactive). 错误消息,而不是提示输入密码?

它还会影响其他提示(例如输入 env.host_string 的提示),但您可以使用 env.abort_on_prompts = True (--abort_on_prompts).

当 Fabric 根据提示中止时,它会抛出内置的 SystemExit 异常,如果程序员想要 select 另一个 SSH 密钥或用户名登录时可以捕获该异常。

参见env documentation