面料密码

时间:2010-02-26 05:48:50

标签: python fabric

每次结构运行时,都会询问root密码,是否可以自动发送。

fab staging test

7 个答案:

答案 0 :(得分:56)

我知道您已经询问了密码,但是配置系统以便您可以在没有密码的情况下进行结构(即SSH)会更好吗?

为此,在本地机器上执行:

  1. ssh-keygen并同意所有默认设置(如果您没有其他原因,请另行说明)
  2. cat ~/.ssh/id_rsa.pub并复制该密钥
  3. 在远程计算机上:

    1. mkdir ~/.ssh && chmod 700 ~/.ssh
    2. touch ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2
    3. 将复制的密钥粘贴到authorized_keys2
    4. 从现在开始,您的远程计算机“信任”您的本地计算机,并允许在没有密码的情况下将其登录。方便。

答案 1 :(得分:50)

您还可以基于每个主机设置密码。 这对我来说并不明显,所以在这里,任何人都在寻找这个:

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就不会要求它了。

答案 2 :(得分:47)

fab -h会向您显示所有选项,您也可以阅读它们here

特别是,我引用,

  

-p PASSWORD, - password = PASSWORD

     

将env.password设置为给定的字符串;   然后它将被用作默认值   进行SSH连接时的密码   或者调用sudo程序。

答案 3 :(得分:8)

只为添加搜索结果的任何人添加,您可以在运行fab时指定-I选项,以提示您输入默认密码。这种方式在命令历史记录中不可见

示例:

$ fab -I my_task
Initial value for env.password: 

答案 4 :(得分:6)

在不将密码放入进程列表(命令显示在ps aux中)的情况下执行此操作的一种方法是将其放在fabfile.py中,如下所示:

from fabric.context_managers import env
env.password = 'PASSWORD'

将它放在任何进入远程系统的地方之前,它不会再要求输入密码了。

答案 5 :(得分:1)

还可以在connect_args中设置ssh密码

    conn = Connection(
    "{username}@{ip}:{port}".format(
        username=username,
        ip=ip,
        port=port,
    ),
    connect_kwargs={"password": password},
)

答案 6 :(得分:0)

可以使用keyring模块将密码安全地存储在操作系统密钥环服务中,然后可以在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')