traduccion software examples python fabric

python - software - Usar un archivo de claves SSH con Fabric



pip install fabric (6)

¿Cómo se configura el tejido para conectarse a hosts remotos utilizando archivos de claves SSH (por ejemplo, instancias de Amazon EC2)?


Como se indicó anteriormente, Fabric admitirá configuraciones de archivo .ssh / config después de una moda, pero usar 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 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.


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í una publicación en el blog sobre eso ( con una esencia correspondiente ).

Básicamente, el uso es algo como esto:

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 env.key_filename , para que la configuración de Paramiko pueda buscarla al conectarse.


Otra característica interesante disponible a partir de Fabric 1.4: Fabric ahora admite configuraciones SSH .

Si ya tiene todos los parámetros de conexión SSH en su archivo ~/.ssh/config , Fabric lo admitirá de manera nativa, todo lo que necesita hacer es agregar:

env.use_ssh_config = True

al comienzo de tu fabfile


Para mí, lo 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 [user@]host[:port]]

Sin embargo, lo siguiente hizo:

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

o

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


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

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


Tuve que hacer esto hoy, mi archivo .py era lo más simple posible, como el que se publicó en la respuesta de @YuvalAdam, pero aún recibí una contraseña pidiéndome ...

Mirando el paramiko (la biblioteca utilizada por fabric para ssh) log, encontré la línea:

Par ssh incompatible (sin algoritmo kex aceptable)

paramiko con:

sudo pip install paramiko --upgrade

Y ahora está funcionando.