2011-10-14 21 views
5

Estoy ejecutando algunas tareas de implementación con Fabric que necesita extraer/actualizar un repositorio Mercurial en la máquina y luego ejecutar la copia/configuración adecuada.Ejecutar ssh-add con Fabric en una máquina

Cada vez que instalo una nueva máquina (actualmente estamos usando EC2 para nuestra infraestructura) o cuando ejecuto hg pull en la máquina, me preguntará por mi contraseña clave ssh, eso es un poco molesto cuando necesitamos inicializar una docena de máquinas a la vez.

He tratado de ejecutar ssh-add en Tela cuando se inicializa la nueva instancia EC2, pero parece que ssh-agent que no se está ejecutando para esa concha y me sale un mensaje Could not open a connection to your authentication agent. desde la salida de la tela.

¿Cómo funcionaría ssh-add cuando esté conectado a la instancia mediante el script Fabric?

Respuesta

2

A comment en el rastreador de problemas de la tela resuelto esto para mí. Es una versión modificada del lincolnloop solution. El uso de este "ejecutar" en lugar de fabric canalizará tus comandos a través de ssh localmente, permitiendo que tu ssh-agent local proporcione las claves.

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)) 

Tenga en cuenta que estoy ejecutando Fabric 1.3.2, y esta solución no será necesaria por mucho más tiempo.

Cuestiones relacionadas