我在使用Fabric部署Django站点时遇到了一个奇怪的问题.我已经配置了两台服务器来使用密钥文件进行登录.我可以在没有密码的情况下SSH到两者.我可以正确地运行fab,
$ fab live pull
[mysite.com] Executing task 'pull'
[mysite.com] run: test -d proj
[mysite.com] run: test -d proj/.git
[mysite.com] run: git pull origin master
...
Run Code Online (Sandbox Code Playgroud)
而另一台服务器要求输入密码:
$ fab staging pull
[dev.mysite.com] Executing task 'pull'
[dev.mysite.com] run: test -d proj
[dev.mysite.com] Login password:
Run Code Online (Sandbox Code Playgroud)
fabfile非常明确地设置
def staging():
env.hosts = ['dev.mysite.com']
env.user = 'bamboo'
env.key_filename = '~/.ssh/id_dsa_bamboo'
Run Code Online (Sandbox Code Playgroud)
并直接从命令行运行ssh工作
$ ssh bamboo@dev.mysite.com -i ~/.ssh/id_dsa_bamboo
Last login: Wed Apr 11 06:24:28 2012 from xxx.xxx.xx.xx
[bamboo@dev ~]$
Run Code Online (Sandbox Code Playgroud)
我也尝试env.use_ssh_config = True使用~/.ssh/configset 设置和运行 …
我正在使用Fabric运行以下内容:
def staging():
""" use staging environment on remote host"""
env.user = 'ubuntu'
env.environment = 'staging'
env.hosts = ['host.dev']
_setup_path()
def bootstrap():
""" initialize remote host environment (virtualenv, deploy, update) """
require('root', provided_by=('staging', 'production'))
run('mkdir -p %(root)s' % env)
run('mkdir -p %s' % os.path.join(env.home, 'www', 'log'))
create_virtualenv()
deploy()
update_requirements()
Run Code Online (Sandbox Code Playgroud)
但我明白了:
ubuntu@host.dev:~/projects/proj_name$ fab staging bootstrap
[host.dev] run: mkdir -p /home/ubuntu/www/staging
Password for ubuntu@host.dev:
Run Code Online (Sandbox Code Playgroud)
为什么Fabric要求我的密码?这是sudoers文件中没有密码的默认ubuntu root用户.这里发生了什么?