Comment configurer Fabric pour se connecter à des hôtes distants à l'aide de fichiers de clés SSH (par exemple, des instances Amazon EC2)?
100
Il convient également de mentionner ici que vous pouvez utiliser les arguments de ligne de commande pour cela:
fab command -i /path/to/key.pem [-H [user@]host[:port]]
Trouver un fabfile simple avec un exemple fonctionnel d'utilisation de fichier de clé SSH n'est pas facile pour une raison quelconque. J'ai écrit un article de blog à ce sujet ( avec l'essentiel ).
Fondamentalement, l'utilisation ressemble à ceci:
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')
L'important est de définir la env.key_filename
variable d'environnement, afin que la configuration Paramiko puisse la rechercher lors de la connexion.
env.key_filename
peut contenir une liste de chaînes pour essayer plusieurs fichiers de clés pour une connexion.settings
gestionnaire de contexte et je ne pouvais pas lui faire reconnaître le key_filename jusqu'à ce que je changekey_filename='/path/to/key'
enkey_filename=['/path/to/key']
donc si quelqu'un d'autre a des problèmes, faire key_filename une liste de clés pourrait le résoudre. C'est avec fab 1.10.1 et Paramiko 1.15.2Une autre fonctionnalité intéressante disponible à partir de Fabric 1.4 - Fabric prend désormais en charge les configurations SSH .
Si vous avez déjà tous les paramètres de connexion SSH dans votre
~/.ssh/config
fichier, Fabric le prendra en charge nativement, il vous suffit d'ajouter:au début de votre fabfile.
la source
IOError: [Errno 2] No such file or directory: ' /path/to/.ssh/key'
ouLogin password for ' root':
assurez-vous simplement que vous n'avez pas d'espaces dans votre fichier.ssh/config
. C'est par exempleUser=root
au lieu deUser = root
...Pour fabric2 dans fabfile, utilisez ce qui suit:
et exécutez-le avec:
MISE À JOUR:
Pour plusieurs hôtes (un hôte fera également l'affaire), vous pouvez utiliser ceci:
et exécutez-le avec fab ou fab2:
la source
staging
tâche?Pour moi, ce qui suit n'a pas fonctionné:
ou
Cependant, ce qui suit a fait:
ou
la source
env.user="ubuntu"
place deenv.user=["ubuntu"]
.Je devais le faire aujourd'hui, mon fichier .py était aussi simple que possible, comme celui publié dans la réponse de @YuvalAdam mais je continuais à être invité à entrer un mot de passe ...
En regardant le
paramiko
journal (la bibliothèque utilisée par fabric pour ssh), j'ai trouvé la ligne:J'ai mis
paramiko
à jour avec:Et maintenant ça marche.
la source
Comme indiqué ci-dessus, Fabric prendra en charge les paramètres de fichier .ssh / config d'une certaine manière, mais l'utilisation d'un fichier pem pour ec2 semble être problématique. IOW un fichier .ssh / config correctement configuré fonctionnera à partir de la ligne de commande via «ssh servername» et ne fonctionnera pas avec «fab quelque chose» quand env.host = [«servername»].
Ce problème a été résolu en spécifiant env.key_filename = 'keyfile' dans mon fabfile.py et en dupliquant l'entrée IdentityFile déjà dans mon .ssh / config.
Cela pourrait être Fabric ou Paramiko, qui dans mon cas était Fabric 1.5.3 et Paramiko 1.9.0.
la source
Aucune de ces réponses n'a fonctionné pour moi sur py3.7, fabric2.5.0 et paramiko 2.7.1.
Cependant, l'utilisation de l'attribut PKey dans la documentation fonctionne: http://docs.fabfile.org/en/2.5/concepts/authentication.html#private-key-objects
la source