每次fabric运行时,它都会询问root密码,是否可以自动发送相同的密码。
fab staging test
我知道你问过密码,但是配置系统不是更好,这样你就可以在没有密码的情况下进行结构(即 SSH)吗?
为此,在本地机器上执行:
ssh-keygen
并同意所有默认设置(如果您没有理由不这样做)cat ~/.ssh/id_rsa.pub
并复制该密钥在远程机器上:
mkdir ~/.ssh && chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2
authorized_keys2
从现在开始,您的远程机器“信任”您的本地机器并允许在没有密码的情况下登录。便利。
您还可以为每个主机设置密码。这对我来说并不明显,所以这里适合任何寻找这个的人:
from fabric import env
env.hosts = ['user1@host1:port1', 'user2@host2.port2']
env.passwords = {'user1@host1:port1': 'password1', 'user2@host2.port2': 'password2'}
Fabric 在 env.passwords 字典中缓存使用过的密码。它使用完整的主机字符串作为该字典的键和密码作为值来设置此缓存。如果你在执行任何任务之前自己设置了这个字典,Fabric 根本不会要求它们。
fab -h
将向您显示所有选项,您也可以在此处阅读它们。
特别是,我引用,
-p 密码,--密码=密码
将 env.password 设置为给定的字符串;然后在进行 SSH 连接或调用 sudo 程序时将其用作默认密码。
只是为任何从搜索中结束的人添加,您可以-I
在运行 fab 时指定选项,以提示您输入要使用的默认密码。这样它就不会在您的命令历史记录中可见
例子:
$ fab -I my_task
Initial value for env.password:
也可以设置 ssh 密码connect_args
conn = Connection(
"{username}@{ip}:{port}".format(
username=username,
ip=ip,
port=port,
),
connect_kwargs={"password": password},
)
在不将密码放入进程列表(命令显示在 ps aux 中)的情况下执行此操作的一种方法是将其放入 fabfile.py 中,如下所示:
from fabric.context_managers import env
env.password = 'PASSWORD'
把它放在任何进入远程系统的东西之前,它就不会再要求输入密码了。
可以通过密钥环模块将密码安全地存储在操作系统密钥环服务中,然后可以自动检索和使用密码fabfile.py
。
您首先需要将密码存储在密钥环中,例如使用 Python shell:
>>> import keyring
>>> keyring.set_password('some-host', 'some-user', 'passwd')
然后您可以在 中使用它fabfile.py
,例如使用 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')