Chaque fois que la matrice s'exécute, elle demande le mot de passe root. Peut-il être envoyé de la même manière pour les propositions automatisées.
fab staging test
fab -h
va vous montrer toutes les options, vous pouvez aussi les lire ici .
En particulier, et je cite,
-p MOT DE PASSE, --password = MOT DE PASSE
Définit env.password sur la chaîne donnée; il sera alors utilisé par défaut mot de passe pour établir des connexions SSH ou en appelant le programme Sudo.
Je sais que vous avez posé une question sur le mot de passe, mais ne vaudrait-il pas mieux configurer le système de manière à ce que vous puissiez créer la structure (SSH) sans mot de passe?
Pour cela, sur la machine locale, faites:
ssh-keygen
et d'accord avec toutes les valeurs par défaut (si vous n'avez aucune raison, faites le contraire)cat ~/.ssh/id_rsa.pub
et copier cette cléSur la machine distante:
mkdir ~/.ssh && chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2
authorized_keys2
A partir de maintenant, votre machine distante "fait confiance" à votre machine locale et permet de la connecter sans mot de passe. Pratique.
Vous pouvez également définir des mots de passe par hôte ..__ Ce n’était pas évident pour moi, alors voici ce qui convient à tous ceux qui recherchent ceci:
from fabric import env
env.hosts = ['user1@Host1:port1', '[email protected]']
env.passwords = {'user1@Host1:port1': 'password1', '[email protected]': 'password2'}
Les caches Fabric utilisent les mots de passe utilisés dans le dictionnaire env.passwords . Il définit ce cache en utilisant la chaîne d'hôtes complets comme clé de ce dictionnaire et le mot de passe comme valeur . Si vous définissez vous-même ce dictionnaire avant d'exécuter une tâche, Fabric ne les demandera pas du tout.
Pour ajouter à ceux qui se retrouvent ici à la suite d'une recherche, vous pouvez spécifier l'option -I
lors de l'exécution de fab pour qu'elle vous invite à spécifier un mot de passe par défaut. De cette façon, il ne sera pas visible dans l'historique de vos commandes
exemple:
$ fab -I my_task
Initial value for env.password:
Une façon de le faire sans mettre le mot de passe dans la liste des processus (les commandes sont affichées dans ps aux) consiste à le mettre dans fabfile.py comme suit:
from fabric.context_managers import env
env.password = 'PASSWORD'
Mettez cela avant tout ce qui va au système distant et il ne demandera plus de mot de passe.
Il est également possible de définir le mot de passe ssh dans connect_args
conn = Connection(
"{username}@{ip}:{port}".format(
username=username,
ip=ip,
port=port,
),
connect_kwargs={"password": password},
)
Il est possible de stocker le mot de passe de manière sécurisée dans le service de clés du système d’exploitation avec le module keyring . Le mot de passe peut ensuite être automatiquement récupéré et utilisé dans fabfile.py
.
Vous devez d’abord stocker le mot de passe dans le trousseau, par exemple à l’aide du shell Python:
>>> import keyring
>>> keyring.set_password('some-Host', 'some-user', 'passwd')
Ensuite, vous pouvez l’utiliser dans fabfile.py
, par exemple avec Fabric 2:
from fabric import task
import keyring
@task
def restart_Apache(connection):
connection.config.Sudo.password = keyring.get_password(connection.Host, 'some-user')
connection.Sudo('service Apache2 restart')