2011-03-16 21 views

Respuesta

60

También vale la pena mencionar aquí que puede utilizar los argumentos de línea de comandos para esto:

fab command -i /path/to/key.pem [-H [[email protected]]host[:port]] 
144

Encontrar un archivo fab simple con un ejemplo de trabajo de uso de archivos de claves SSH no es fácil por alguna razón. Escribí un blog post al respecto (with a matching gist).

Básicamente, el uso más o menos así:

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

La parte importante es establecer la variable de entorno de env.key_filename, por lo que la configuración paramiko puede buscarlo cuando se conecta.

+4

en la práctica esta es la mejor respuesta. – panchicore

+2

'env.key_filename' [puede contener una lista de cadenas] (http://docs.fabfile.org/en/latest/usage/env.html#key-filename) para probar varios archivos de claves para una conexión. –

+0

Estaba configurando la clave programáticamente en una de mis tareas usando el administrador de contexto 'settings' y no pude lograr que reconociera key_filename hasta que cambie' key_filename = '/ path/to/key'' a 'key_filename = ['/ruta/a/clave '] 'así que si alguien más está teniendo problemas, hacer key_filename una lista de claves podría arreglarlo. Esto es con fab 1.10.1 y Paramiko 1.15.2 – Jaymon

64

Otra característica fresca disponible a partir de Tela 1,4-Fabric now supports SSH configs.

Si ya tiene todos los parámetros de conexión SSH en su archivo ~/.ssh/config, Tela de forma nativa apoyarlo, todo lo que tiene que hacer es añadir:

env.use_ssh_config = True 

al comienzo de su fabfile.

+2

¡Muy útil! Si se encuentra con errores como 'IOError: [Errno 2] No existe ese archivo o directorio: '/ path/to/.ssh/key'' o' Login password for' root ': 'solo asegúrese de no tener espacios en blanco en su '.ssh/config'. Es por ejemplo 'User = root' en lugar de' User = root' ... – dennis

+0

@dennis ¡Esto parece ser un problema en 2016 ..! ¡Gracias! – gabn88

1

Como se indicó anteriormente, Fabric admitirá la configuración de archivos .ssh/config de una manera, pero el uso de un archivo pem para ec2 parece ser problemático. IOW un archivo .ssh/config correctamente configurado funcionará desde la línea de comando a través de 'ssh servername' y no funcionará con 'fab sometask' cuando env.host = ['servername'].

Esto se solucionó especificando env.key_filename = 'keyfile' en mi fabfile.py y duplicando la entrada de IdentityFile que ya estaba en mi .ssh/config.

Esto podría ser Fabric o paramiko, que en mi caso era Fabric 1.5.3 y Paramiko 1.9.0.

13

Para mí, la siguiente no funcionó:

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

o

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

Sin embargo, el siguiente lo hizo:

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

o

env.key_filename=['keyfileq.pem'] 
env.host_string="[email protected]" 
+3

Tu primer ejemplo funciona para mí si usas 'env.user =" ubuntu "' en lugar de 'env.user = [" ubuntu "]'. –

6

que tenía que hacer esto hoy en día, mi archivo .py era tan simple como sea posible, como la que se registró en la respuesta de @YuvalAdam pero todavía me hacía cada vez pide una contraseña ...

Mirando el paramiko (la biblioteca utilizada por la tela para ssh) ingrese, me encontré con la línea:

Incompatible ssh peer (no acceptable kex algorithm)

puse al día con paramiko:

sudo pip install paramiko --upgrade 

Y ahora que está funcionando.

Cuestiones relacionadas