Python Fabric 与 Amazon EC2:请求输入 Sudo 密码

5 投票
2 回答
2822 浏览
提问于 2025-04-17 02:04

你知道在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。

撰写回答