PythonFabric和AmazonEC2:询问Sudo密码

PythonFabric和AmazonEC2:询问Sudo密码,python,amazon-ec2,fabric,Python,Amazon Ec2,Fabric,您知道,在EC2上,没有与“ubuntu”用户关联的密码。使用以下行,如果我尝试运行: 工厂开发安装主任 我得到: [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]登录密码: 我尝试将shell=False添加到sudo方法中(根据),但它没有改变任何东西 有什么想

您知道,在EC2上,没有与“ubuntu”用户关联的密码。使用以下行,如果我尝试运行:

工厂开发安装主任

我得到:

[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]登录密码:

我尝试将shell=False添加到sudo方法中(根据),但它没有改变任何东西

有什么想法吗?非常感谢

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))

运行fab命令时,需要指定与EC2实例关联的密钥对文件名

用法:
fab[options][:arg1,arg2=val2,host=foo,hosts='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.
从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')
从fabric.context\u导入cd
从fabric.operations导入sudo
从fabric.api导入运行,env
导入操作系统
HOME=os.getenv(“HOME”)
env.user='ubuntu'
env.hosts=['PUBLICDNS.ap-southest-1.compute.amazonaws.com','ANOTHERSERVER.compute.amazonaws.com']#可以添加多个实例
env.key_文件名=[
“%s/.pem”%HOME
]#假设密钥对文件位于主目录中
#我们希望在远程计算机上运行的示例代码
def update():
使用cd('/var/www'):
sudo('svn更新')
使用cd('/var/www/cache'):
运行('rm-rf*')
sudo('service lighttpd restart')

要运行该文件,请在终端中键入fab update。

如果像这样使用
run
它会做什么:
run('sudo chown-R…')
?我也通过常规run()来实现,而不仅仅是sudo()。将shell和pty设置为False根本没有任何帮助。事实证明,我的问题是我更改了pem文件密钥,但没有更新文件!现在一切都好了。我也有同样的问题。非常令人沮丧。我可以在没有密码的情况下手动登录shell和sudo,但由于某些原因Fabric不能。OP指的是sudo密码,而不是ssh密码。这与OP的问题有什么关系?他可以登录到服务器,所以他已经有了他的密钥对。但是,当他运行sudo时,会被要求输入密码,这无法通过生成新的密钥对来解决……Cerin-OP似乎已将所有内容嵌入development()函数中。在shell上执行fabric install_dir时,默认情况下不会调用此函数。我想在回答这个问题时,我没有注意development()函数。我写了对我有用的东西。