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

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

90 голосов | спросил Yuval Adam 16 MarpmWed, 16 Mar 2011 18:20:01 +03002011-03-16T18:20:01+03:0006 2011, 18:20:01

6 ответов


0

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

fab command -i /path/to/key.pem [-H [[email protected]]host[:port]]
ответил Thomas 17 MaramThu, 17 Mar 2011 02:35:24 +03002011-03-17T02:35:24+03:0002 2011, 02:35:24
0

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

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

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 могла искать ее при подключении.

ответил Yuval Adam 16 MarpmWed, 16 Mar 2011 18:22:29 +03002011-03-16T18:22:29+03:0006 2011, 18:22:29
0

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

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 [[email protected]]host[:port]]

Тем не менее, следующее:

env.key_filename=['keyfile.pem']
env.hosts=["[email protected]"]

или

env.key_filename=['keyfileq.pem']
env.host_string="[email protected]"
ответил Gaurav Toshniwal 18 FebruaryEurope/MoscowbTue, 18 Feb 2014 11:04:21 +0400000000amTue, 18 Feb 2014 11:04:21 +040014 2014, 11:04:21
0

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

Посмотрев журнал paramiko (библиотека, используемая фабрикой для ssh), я нашел строку:

  

Несовместимый ssh ​​peer (без приемлемого алгоритма kex)

Я обновил paramiko:

sudo pip install paramiko --upgrade

И теперь это работает.

ответил flagg19 9 FebruaryEurope/MoscowbMon, 09 Feb 2015 15:18:26 +0300000000pmMon, 09 Feb 2015 15:18:26 +030015 2015, 15:18:26
0

Для фабрики 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
ответил MikeL 8 PM000000120000001731 2018, 12:58:17
0

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

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

Это может быть либо Fabric, либо paramiko, в моем случае это были Fabric 1.5.3 и Paramiko 1.9.0.

ответил Jeff Doran 7 FebruaryEurope/MoscowbThu, 07 Feb 2013 00:29:59 +0400000000amThu, 07 Feb 2013 00:29:59 +040013 2013, 00:29:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132