使用Fabri时连接到~/.ssh/config中列出的主机

2024-04-29 19:16:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有麻烦^{}无法识别我在~/.ssh/config中拥有的主机。

我的fabfile.py如下:

from fabric.api import run, env

env.hosts = ['lulu']

def whoami():
    run('whoami')

运行$ fab whoami给出:

[lulu] run: whoami

Fatal error: Name lookup failed for lulu

名称lulu在我的~/.ssh/config中,如下所示:

Host lulu
     hostname 192.168.100.100
     port 2100
     IdentityFile ~/.ssh/lulu-key

我解决这个问题的第一个想法是添加一些类似lulu.lulu的内容到/etc/hosts(我在Mac上),但是我还必须将标识文件传递到Fabric—而且我宁愿将身份验证(即~/.ssh/config)与部署(即fabfile.py)分开。

另外,顺便说一下,如果您尝试连接到hosts文件中的主机,fabric.contrib.projects.rsync_project似乎不承认hosts.env中的“端口”(即,如果您使用hosts.env = [lulu:2100],则对rsync_project的调用似乎尝试连接到lulu:21)。

Fabric不识别这个lulu名称有什么原因吗?


Tags: 文件runpyenvproject名称configssh
3条回答

注意,当名称不在/etc/hosts中时,也会发生这种情况。我遇到了同样的问题,必须将主机名添加到该文件和~/.ssh/config中。

从1.4.0版开始,Fabric uses your ssh config(部分)。但是,您需要显式地启用它,使用

env.use_ssh_config = True

在你的档案的顶端附近。完成此操作后,Fabric应该读取ssh配置(默认情况下从~/.ssh/config,或者从env.ssh_config_path)。

一个警告:如果使用的版本早于1.5.4,则如果设置了env.use_ssh_config,但不存在配置文件,则会发生中止。在这种情况下,您可以使用如下解决方案:

if env.ssh_config_path and os.path.isfile(os.path.expanduser(env.ssh_config_path)):
    env.use_ssh_config = True

更新:这个答案is now outdated


Fabric当前不支持.ssh/config文件。您可以在一个函数中设置这些参数,然后调用cli,例如:fab production task;production设置用户名、主机名、端口和ssh标识。

至于rsync项目,它现在应该具有端口设置功能,如果没有,您可以始终运行local(“rsync…”),因为这本质上是所贡献的函数所做的。

相关问题 更多 >