【问题标题】:Python Fabric and Amazon EC2 : Sudo password askedPython Fabric 和 Amazon EC2:询问 Sudo 密码
【发布时间】:2011-09-11 22:03:48
【问题描述】:

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

fab 开发安装目录

我明白了:

[ec2-46-51-132-252.eu-west-1.compute.amazonaws.com] 须藤:chown -R webadmin:webadmin /var/www [ec2-46-51-132-252.eu-west-1.compute.amazonaws.com] 登录密码:

我尝试将 shell=False 添加到 sudo 方法(根据 Can I prevent fabric from prompting me for a sudo password?),但它没有任何改变

有什么想法吗?非常感谢!

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

【问题讨论】:

  • 如果你像这样使用run,它会做什么:run('sudo chown -R ...')
  • 我也可以通过常规的 run() 得到这个,而不仅仅是 sudo()。将 shell 和 pty 设置为 False 根本没有帮助。
  • 原来我的问题是我已经更改了我的 pem 文件密钥并且没有更新 fabfile!现在一切都好。
  • 我也有同样的问题。非常令人沮丧。我可以在没有密码的情况下手动登录 shell 和 sudo,但由于某种原因 Fabric 不能。

标签: python amazon-ec2 fabric


【解决方案1】:

从 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。

【讨论】:

  • 这与 OP 的问题有什么关系?他可以登录到服务器,所以他已经有了他的密钥对。但是他在运行 sudo 时被要求输入密码,这不会通过生成新的密钥对来解决...
  • Cerin - OP 似乎已将所有内容嵌入到 development() 函数中。在 shell 上执行 fabric install_dir 时,默认不调用此函数。我认为在回答问题时,我没有关注 development() 函数。我写了对我有用的东西。
【解决方案2】:

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

用法:fab [options] &lt;command&gt;[: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.

【讨论】:

  • OP 说的是 sudo 密码,而不是 ssh 密码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 2021-06-13
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 2019-11-21
相关资源
最近更新 更多