我Fabric
无法识别我所拥有的主机~/.ssh/config
.
我的fabfile.py
情况如下:
from fabric.api import run, env env.hosts = ['lulu'] def whoami(): run('whoami')
跑步$ fab whoami
给出:
[lulu]跑:whoami
致命错误:lulu的名称查找失败
这个名字lulu
在我的~/.ssh/config
,就像这样:
Host lulu hostname 192.168.100.100 port 2100 IdentityFile ~/.ssh/lulu-key
我首先想到的解决,这是添加类似lulu.lulu
以/etc/hosts
(我在Mac),但后来我不得不在身份文件还传递给面料-我宁愿让我的认证(即~/.ssh/config
)从我的部署分开(即fabfile.py
).
顺便说一句,顺便说一句,如果你试图连接到hosts文件中的主机,fabric.contrib.projects.rsync_project
似乎并没有确认"端口" hosts.env
(即如果你使用hosts.env = [lulu:2100]
呼叫rsync_project
似乎尝试连接lulu:21
).
Fabric有没有认识这个lulu
名字的原因?
从版本1.4.0开始,Fabric使用您的ssh配置(部分).但是,您需要使用显式启用它
env.use_ssh_config = True
靠近fabfile顶部的某个地方.执行此操作后,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
请注意,当名称不在时,也会发生这种情况/etc/hosts
.我有同样的问题,不得不将主机名添加到该文件和~/.ssh/config
.
更新:此答案现已过时.
Fabric目前不支持.ssh/config文件.您可以在函数中设置它们然后调用cli,例如:fab生产任务; production设置用户名,主机名,端口和ssh标识.
至于rsync项目,现在应该具有端口设置能力,如果没有,你可以随时运行本地("rsync ..."),因为这基本上是贡献功能所做的.