¿Cómo se configura la estructura para conectarse a hosts remotos mediante archivos de claves SSH (por ejemplo, instancias Amazon EC2)?
100
También vale la pena mencionar aquí que puede usar los argumentos de la línea de comando para esto:
fab command -i /path/to/key.pem [-H [user@]host[:port]]
Encontrar un fabfile simple con un ejemplo funcional del uso de archivos de claves SSH no es fácil por alguna razón. Escribí una publicación de blog al respecto ( con una esencia coincidente ).
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')
Lo importante es configurar la env.key_filename
variable de entorno, para que la configuración de Paramiko pueda buscarla al conectarse.
env.key_filename
puede contener una lista de cadenas para probar varios archivos de claves para una conexión.settings
administrador de contexto y no pude hacer que reconociera el nombre_archivo_clave hasta que cambiékey_filename='/path/to/key'
a,key_filename=['/path/to/key']
así que si alguien más tiene problemas, hacer que nombre_archivo clave sea una lista de claves podría solucionarlo. Esto es con fab 1.10.1 y Paramiko 1.15.2Otra 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
~/.ssh/config
archivo, Fabric lo admitirá de forma nativa, todo lo que necesita hacer es agregar:al comienzo de su fabfile.
fuente
IOError: [Errno 2] No such file or directory: ' /path/to/.ssh/key'
oLogin password for ' root':
simplemente asegúrese de no tener espacios en blanco en su.ssh/config
. Es, por ejemplo, enUser=root
lugar deUser = root
...Para fabric2 en fabfile, use lo siguiente:
y ejecutarlo con:
ACTUALIZACIÓN:
para varios hosts (un host también lo hará) puede usar esto:
y ejecutarlo con fab o fab2:
fuente
staging
tarea?Para mí, lo siguiente no funcionó:
o
Sin embargo, lo siguiente hizo:
o
fuente
env.user="ubuntu"
lugar deenv.user=["ubuntu"]
.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 así me seguían pidiendo una contraseña ...
Mirando el
paramiko
registro (la biblioteca utilizada por fabric para ssh), encontré la línea:Actualicé
paramiko
con:Y ahora está funcionando.
fuente
Como se indicó anteriormente, Fabric admitirá la configuración del archivo .ssh / config de alguna manera, pero usar un archivo pem para ec2 parece ser problemático. IOW, un archivo .ssh / config correctamente configurado funcionará desde la línea de comandos a través de 'ssh servername' y no funcionará con 'fab sometask' cuando env.host = ['servername'].
Esto se superó especificando env.key_filename = 'keyfile' en mi fabfile.py y duplicando la entrada IdentityFile que ya estaba en mi .ssh / config.
Este podría ser Fabric o paramiko, que en mi caso fue Fabric 1.5.3 y Paramiko 1.9.0.
fuente
Ninguna de estas respuestas me funcionó en py3.7, fabric2.5.0 y paramiko 2.7.1.
Sin embargo, el uso del atributo PKey en la documentación funciona: http://docs.fabfile.org/en/2.5/concepts/authentication.html#private-key-objects
fuente