Использование ключевого файла 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.