面料不断要求密码

时间:2012-10-09 08:12:25

标签: python ssh fabric

我有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被禁用而无法工作

2 个答案:

答案 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运行。