Запустите ssh-add с Fabric на машине - PullRequest
5 голосов
/ 14 октября 2011

Я выполняю некоторые задачи развертывания с Fabric, который должен извлекать / обновлять репозиторий Mercurial на машине, а затем выполнять соответствующее копирование / настройку.

Каждый раз, когда я устанавливаю новую машину (мыв настоящее время мы используем EC2 для нашей инфраструктуры) или когда я запускаю hg pull на машине, он запрашивает мою ключевую фразу ssh, что немного раздражает, когда нам нужно инициализировать дюжину машин одновременно.

Я пытался запустить ssh-add в Fabric, когда инициализируется новый экземпляр EC2, но кажется, что ssh-agent не работает для этой оболочки, и я получаю сообщение Could not open a connection to your authentication agent. с выхода Fabric.

Как заставить ssh-add работать при подключении к экземпляру сценарием Fabric?

1 Ответ

3 голосов
/ 25 ноября 2011

A комментарий для системы отслеживания проблем с тканями решил эту проблему для меня.Это модифицированная версия решения lincolnloop .Использование этого «run» вместо фабрики будет направлять ваши команды через ssh локально, позволяя вашему локальному ssh-агенту предоставлять ключи.

from fabric.api import env, roles, local, output
from fabric.operations import _shell_escape

def run(command, shell=True, pty=True):
    """
    Helper function.
    Runs a command with SSH agent forwarding enabled.

    Note:: Fabric (and paramiko) can't forward your SSH agent. 
    This helper uses your system's ssh to do so.
    """
    real_command = command
    if shell:
        cwd = env.get('cwd', '')
        if cwd:
            cwd = 'cd %s && ' % _shell_escape(cwd)
        real_command = '%s "%s"' % (env.shell,
            _shell_escape(cwd + real_command))
    if output.debug:
        print("[%s] run: %s" % (env.host_string, real_command))
    elif output.running:
        print("[%s] run: %s" % (env.host_string, command))
    local("ssh -A %s '%s'" % (env.host_string, real_command))

Обратите внимание, что я использую Fabric 1.3.2, и этоисправление не понадобится намного дольше.

...