我需要一个自动化的工作来执行对付Foreman的REST API调用,而不用为此设置一个帐户,然后永远维护密码。
然而,看来,福尔曼只有一个“全部或全部” – 如果身份validation是必需的( :login: true ),那么这将是所有的要求。
这是真的,还是外观欺骗和福尔曼可以告诉允许匿名查找和主机浏览,而仍然要求authentication的任何变化 ?
好吧,事实certificate,Foreman支持OAuth1类访问,与简单的静态用户名/密码相比,这种访问并不多(甚至没有 )。 更糟糕的是,除非采取特殊措施将这种访问权限映射到未授权的帐户,否则使用OAuth1的连接将具有pipe理员权限。
访问您的Foreman安装的设置页面以打开映射和/或学习/设置OAuth1“密钥”和“秘密”string。
虽然真正的用户可能通过LDAP进行身份validation(例如,针对公司的Active Directory)或其他方式,但OAuth1使用脚本可以永远使用相同的“密钥”和“秘密”值 – 甚至不会过期。
编辑 :启用用户映射似乎没有提高安全性 – 任何现有的帐户名称可以指定,并不需要知道该帐户的密码或任何其他秘密。
我用Python实现的简单的Foreman-search脚本就是这样(不支持分页 – 所有的查询都返回到50条以下):
from requests_oauthlib import OAuth1Session import json import sys search=sys.argv[1] fields=sys.argv[2:] if not fields: fields = ['ip'] URL=("https://foreman.example.net/api/v2/hosts?search=%s" % search) # The below highly-secret credentials come from # # https://foreman.example.net/settings # Key='mykey' Secret='mysecret' User='readonly' session=OAuth1Session(Key, Secret) # The FOREMAN-USER header is necessary, if mapping of OAuth-requests is # turned on in Foreman's settings. The username must exist and have the # right "roles" enabled to allow the account to perform the request. session.headers.update({'FOREMAN-USER': User}) request=session.get(URL, verify='/path/to/your/CA/certificate.crt') if not request.ok: request.raise_for_status() response=json.loads(request.content) results=response["results"] for i in xrange(0, response["subtotal"]): entry=results[i] if i > 0: print for field in fields: try: print entry[field], except KeyError: print '-',