我有fab文件,其中包含
env['hosts'] = ['localhost']
env['user'] = 'code'
env['password'] = 'searce'
def mk_dirtree():
sudo("mkdir %s" % PROJECT_DIR)
sudo("chown -R code:code %s" % PROJECT_DIR)
run("mkdir -p %s" % (PROJECT_DIR + '/www/static'))
sudo("chown -R www-data:www-data %s" % (PROJECT_DIR + '/www'))
现在当我fab mk_dirtree
时,我会不断提示[localhost] Login password for 'code':
我在ec2实例上运行此操作,我使用密钥通过ssh连接到该实例,并禁用ssh的密码登录
修改
我认为Fabric首先做ssh code@localhost
但是因为密码sshing被禁用而无法工作
答案 0 :(得分:4)
如果您确实需要并且需要使用run()
而不是local()
,则可以将SSH公钥添加到用户帐户的~/.ssh/authorized_keys
文件中。
这看起来像这样:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
此解决方案将绕过本地计算机的登录密码提示。当然,您必须为运行fabfile的每台本地计算机执行此操作。
答案 1 :(得分:1)
run()
和sudo()
操作是通过ssh执行的。如果要在localhost上运行命令,则应使用local()
代替:
http://docs.fabfile.org/en/1.4.3/api/core/operations.html?highlight=sudo#fabric.operations.local
在同一页面上是run()
和sudo()
的文档,这些文档都指的是它们在“远程主机”上运行的事实,它推断它们将通过ssh运行。