每次结构运行时,都会询问root密码,是否可以自动发送。
fab staging test
答案 0 :(得分:56)
我知道您已经询问了密码,但是配置系统以便您可以在没有密码的情况下进行结构(即SSH)会更好吗?
为此,在本地机器上执行:
ssh-keygen
并同意所有默认设置(如果您没有其他原因,请另行说明)cat ~/.ssh/id_rsa.pub
并复制该密钥在远程计算机上:
mkdir ~/.ssh && chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2
authorized_keys2
从现在开始,您的远程计算机“信任”您的本地计算机,并允许在没有密码的情况下将其登录。方便。
答案 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')