Python Fabric 与 Amazon EC2:请求输入 Sudo 密码
你知道在EC2上,"ubuntu"用户是没有密码的。如果我尝试运行以下命令:
fab development install_dir
我得到的结果是:
[ec2-46-51-132-252.eu-west-1.compute.amazonaws.com] sudo: chown -R webadmin:webadmin /var/www [ec2-46-51-132-252.eu-west-1.compute.amazonaws.com] 登录密码:
我试着在sudo方法中加上shell=False(根据这个链接的建议),但没有任何改变。
有什么想法吗?非常感谢!
def development():
env.envname = 'development'
env.user = 'ubuntu'
env.group = 'ubuntu'
env.chuser = 'webadmin'
env.chgroup = 'webadmin'
env.hosts = ['ec2-***.eu-west-1.compute.amazonaws.com']
env.envname_abriev = 'dev'
env.key_filename = '/home/xx/.ssh/xx.pem'
env.postgresql_version = '9.0'
def install_dir():
if not exists('/var/www'):
sudo('mkdir /var/www')
sudo('chown -R %s:%s /var/www' % (env.chuser, env.chgroup))
2 个回答
1
在运行fab命令的时候,你需要指定一个和你的EC2实例关联的密钥对文件名。
用法:fab [选项] <命令>[:参数1,参数2=值2,主机=foo,主机们='h1;h2',...] ...
选项:
-R ROLES, --roles=ROLES
comma-separated list of roles to operate on
-i KEY_FILENAME path to SSH private key file. May be repeated.
4
从AWS下载(或者创建)一个密钥对文件,具体步骤如下所示:
创建一个名为fabfile.py的文件,并将其内容设置如下:
from fabric.context_managers import cd
from fabric.operations import sudo
from fabric.api import run, env
import os
HOME = os.getenv('HOME')
env.user = 'ubuntu'
env.hosts = ['PUBLICDNS.ap-southeast-1.compute.amazonaws.com','ANOTHERSERVER.compute.amazonaws.com'] #can add multiple instances
env.key_filename = [
'%s/<your-keypair-file>.pem'%HOME
] #assuming keypair file is located in HOME
#example code we want to run on remote machine
def update():
with cd('/var/www'):
sudo('svn update')
with cd ('/var/www/cache'):
run('rm -rf *')
sudo('service lighttpd restart')
要运行这个文件,在终端输入fab update。