我的 ~/.ssh/config 上有以下配置
Host death-star
HostName deathstar.empire.com
User vader
IdentityFile ~/.ssh/death_id_rsa
和下面的fabfile
from fabric.api import env, task
env.use_ssh_config = True
@task
def destroy_rebels():
run("echo Alderaan has been destroyed")
我这样称呼任务:
$ fab --host death-star destroy_rebels
这是我得到的输出:
[death-star] Executing task 'destroy_rebels'
[death-star] run: echo Alderaan has been destroyed
Fatal error: run() received nonzero return code -1 while executing!
Requested: echo Alderaan has been destroyed
Executed: /bin/bash -l -c "echo Alderaan has been destroyed"
Aborting.
Disconnecting from vader@deathstar.empire.com... done.
我很确定 ssh 配置是正确的,因为我可以ssh death-star
没有问题。
此外,当我指定主机名并使用用户 root 的默认密钥而不是使用 ssh 配置文件时,它可以工作:
$ fab --user root --host deathstar.empire.com destroy_rebels
任何想法为什么会发生这种情况?
编辑:这是我的面料版本
$ fab --version
Fabric 1.4.1
ssh (library) 1.7.13
编辑 2:
我已经重写了原帖的部分内容。我意识到root
( 使用默认键id_rsa
总是有效,即使使用 .ssh/config
,如果我添加一个新条目:
Host root-death-star
HostName deathstar.empire.com
User root
IdentityFile ~/.ssh/id_rsa
$ fab --host root-death-star destroy_rebels # this works
但是使用非root用户vader
,有自己的密钥death_id_rsa
,它不会。但是,以 root 和 vader 的身份通过 SSH 连接到服务器仍然有效。