Использование ключевого файла SSH с Fabric

Как настроить fabric для подключения к удаленным хостам с помощью SSH-файлов ключей (например, инстансов Amazon EC2)?

7 ответов


также стоит упомянуть здесь, что вы можете использовать args командной строки для этого:

fab command -i /path/to/key.pem [-H [user@]host[:port]]

найти простой fabfile с рабочим примером использования SSH keyfile по какой-то причине непросто. Я написал блоге об этом (С соответствующим gist).

в основном, использование идет примерно так:

from fabric.api import *

env.hosts = ['host.name.com']
env.user = 'user'
env.key_filename = '/path/to/keyfile.pem'

def local_uname():
    local('uname -a')

def remote_uname():
    run('uname -a')

важной частью является установка env.key_filename переменная окружения, так что конфигурация Paramiko может искать ее при подключении.


другая крутая особенность доступная от ткани 1.4 -ткань теперь поддерживает SSH configs.

Если у вас уже есть все параметры подключения SSH в вашем , ткань будет поддерживать его, все, что вам нужно сделать, это добавить:

env.use_ssh_config = True

в начале вашего fabfile.


для меня не сработало следующее:

env.user=["ubuntu"]
env.key_filename=['keyfile.pem']
env.hosts=["xxx-xx-xxx-xxx.ap-southeast-1.compute.amazonaws.com"]

или

fab command -i /path/to/key.pem [-H [user@]host[:port]]

однако, следующее сделало:

env.key_filename=['keyfile.pem']
env.hosts=["ubuntu@xxx-xx-xxx-xxx-southeast-1.compute.amazonaws.com"]

или

env.key_filename=['keyfileq.pem']
env.host_string="ubuntu@xxx-xx-xxx-xxx.ap-southeast-1.compute.amazonaws.com"

Я должен был сделать это сегодня, мой .файл py был максимально простым, как и тот, который был опубликован в ответе @YuvalAdam, но все же мне постоянно предлагали пароль...

смотреть на!--1--> (библиотека, используемая fabric для ssh) log, я нашел строку:

несовместимый одноранговый SSH (нет приемлемого алгоритма kex)

Я paramiko С:

sudo pip install paramiko --upgrade

и теперь он работает.


для ткани 2.2.2 с помощью fabfile вы можете использовать следующее:

from fabric import task, Connection

@task
def staging(ctx):
    ctx.name = 'staging'
    ctx.user = 'ubuntu'
    ctx.host = '192.1.1.1'
    ctx.connect_kwargs.key_filename = os.environ['ENV_VAR_POINTS_TO_PRIVATE_KEY_PATH']

@task
def do_something_remote(ctx):
    with Connection(ctx.host, ctx.user, connect_kwargs=ctx.connect_kwargs) as conn:
        conn.sudo('supervisorctl status')

здесь:

fab staging do_something_remote

Как указано выше, ткань будет поддерживать .настройки файла ssh/config после моды, но использование файла pem для ec2 кажется проблематичным. IOW правильная настройка .файл ssh / config будет работать из командной строки через "ssh servername" и не сможет работать с "fab sometask", когда env.хозяин=[имя_сервера].

Это было преодолено путем указания env.key_filename= 'keyfile' в моем fabfile.py и дублирование записи IdentityFile уже в моем .ssh / config.

Это может будь то ткань или парамико, которая в моем случае была тканью 1.5.3 и Парамико 1.9.0.