josephmisiti
josephmisiti

Reputation: 9974

Configuring Fabric For EC2

I am trying to create a fabfile.py so that I can deploy on EC2. I have the following in my 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' is the elastic ip of my instance, and i alway login with ubuntu, not root. when i run the following command

fab ec2 run_ls

i see the following output:

[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.

Not sure what is going on, but I can't find to seem any great tutorials on using fabric on ec2, and I do not know how that is possible.

Thanks

Update:

Looks like

env.hosts = ['111.111.111.111'] 

is not valid, you need to use the actually URL

env.hosts = ['mywebsite.com'] 

which fixed my issue

Upvotes: 11

Views: 5626

Answers (3)

qris
qris

Reputation: 8172

From a Vagrant issue on GitHub, you may need to remove the host from the known_hosts file using a command like this:

ssh-keygen -R 111.111.111.111

Upvotes: 4

Alex
Alex

Reputation: 2420

You can also use the '--disable-known-hosts' switch to ignore this error.

Upvotes: 9

Evan R.
Evan R.

Reputation: 3417

Make sure your elastic IP is attached to the instance. I think the key_filename takes a single argument but mine is working when you pass in an array instead:

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

Maybe you should try using the public hostname of your instance like:

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

Upvotes: 7

Related Questions