为EC2配置Fabric

11 投票
3 回答
5609 浏览
提问于 2025-04-16 19:22

我正在尝试创建一个fabfile.py,以便可以在EC2上进行部署。我的fabfile.py里有以下内容:

from __future__ import with_statement
from fabric.api import *


def ec2():
    env.hosts = ['111.111.111.111'] 
    env.user = 'ubuntu'
    env.key_filename = '/path/to/my/pem/key.pem'

def run_ls():
    run('ls -alt')

'111.111.111.111'是我实例的弹性IP,我总是用ubuntu登录,而不是root用户。

当我运行以下命令时:

fab ec2 run_ls

我看到以下输出:

[111.111.111.111] Executing task 'run_ls'
[111.111.111.111] run: ls -alt

Fatal error: Host key for 111.111.111.111 did not match pre-existing key! Server's key was changed recently, or possible man-in-the-middle attack.

Aborting.

我不太明白发生了什么,但我找不到关于在EC2上使用fabric的好教程,我也不知道这怎么可能。

谢谢

更新:

看起来

env.hosts = ['111.111.111.111'] 

这个是不合法的,你需要使用实际的URL

env.hosts = ['mywebsite.com'] 

这解决了我的问题

3 个回答

4

GitHub上的一个Vagrant问题中,你可能需要用下面这样的命令来从known_hosts文件中删除主机:

ssh-keygen -R 111.111.111.111
9

你也可以使用'--disable-known-hosts'这个选项来忽略这个错误。

7

确保你的弹性IP已经连接到实例上。我觉得key_filename只需要一个参数,但我的情况是传入一个数组也能正常工作:

env.user = "ubuntu"
env.key_filename = ["my_key.pem",]

也许你可以尝试使用你实例的公共主机名,比如:

env.roledefs.update({
    'prod': ['ec2-52-14-72-225.us-west-1.compute.amazonaws.com'],
})

撰写回答