netson的ansible hashicorp vault lookup(ahvl)插件的基本库

ahvl的Python项目详细描述


空气阀

netson的ansible hashicorp vault lookup(ahvl)插件的基本库

内容

简介

短版本

一组查找插件,从hashicorp保险库检索机密,如果不存在则自动生成它们。它支持生成密码、ssh密钥、ssh主机密钥和gpg密钥。密钥被生成并转换为各种格式,以支持广泛的应用程序。各种密钥的所有方面都存储在保险库中,并且可以访问。每个秘密都可以通过输出过滤器或散列函数传递,因此不需要进一步处理。需要盐的散列函数将盐存储在保险库中,并保持等幂。

tl;dr

妥善管理秘密是很困难的。尽管有很多很好的工具可以帮助您正确地管理、轮换和审核您的秘密,但它仍然需要很大的努力。这些ansible查找插件旨在使该过程更简单。当使用ansible管理许多服务器时,需要管理的机密数量不断增加,即使ansible提供了自己的ansible保险库作为以加密形式存储这些机密的手段,我仍然觉得这个过程相当麻烦,我想把我所有的秘密完全排除在版本控制之外,不管是否加密。

我第一次尝试使用一个不同的秘密商店,而不是Ansible金库,是建立在Keepass上的,我已经成功和愉快地使用了10多年了。在花了大量时间为keepass开发查找插件之后,我遇到了一个主要问题:性能!每次查找时,keepass数据库都必须解锁、解密、搜索、加密并再次关闭。对于一些查找,这不是一个问题,但是因为我们讨论的是每次查找的秒数,所以这似乎不是一个可伸缩的解决方案。进入Hashicorp保险库。hashicorp保险库是专门为管理机密而构建的,它提供了一些直接现成的重要功能:审计、细粒度访问控制、版本控制等。

我遇到的下一个主要问题是生成机密;当创建用户帐户时,当设置数据库时,当生成ssh密钥时,并且由于最终用户在windows系统上使用putty,当生成gpg密钥以保护自动化备份等。生成机密是一回事,但您需要将这些机密存储在保险库中,以便能够在您的行动手册中检索它们。同样,这是一个相当耗时的过程,更不用说由于缺少参数、系统默认值不安全、工具配置不当或只是缺乏睡眠而产生不安全机密的风险了!

另一个问题是,我在手动秘密管理过程中遇到的问题是,为了特定的目的,您通常需要特定格式的秘密。我已经提到了需要转换为putty格式的ssh密钥,但是在创建用户帐户时,您可能需要将密码散列为sha256crypt散列或特定的应用程序散列,如mysql41散列。

以前我有很多bash脚本来帮助我生成和转换所有这些秘密,但是安全地存储它们总是很麻烦。这些查找插件试图同时解决所有这些问题!不受版本控制的所有机密,将它们安全地存储在hashicorp vault中,当您请求一个不存在的机密时(现在),它只会动态地为您生成并存储在vault中!最后但并非最不重要的是,您可以请求您需要的特定输出,插件将返回转换后的秘密!

秘密

支持各种类型的秘密,分成不同的查找插件。对于所有的查找插件,已经设置了sane和secure默认值,但是您可以使用变量来操作秘密生成过程的几乎所有方面,以满足您的需要。

<表><广告>键入说明 < /广告><正文>密码这个查找插件将返回直接的密码。它使用python库passlib生成安全机密。ssh密钥这个查找插件允许您获取ssh密钥的各个方面:各种格式的私钥(openssh、putty、sshcom、pkcs8)、各种格式的公钥(openssh、pem、pkcs8、rfc4716),还有md5和sha256指纹、密钥art和bubbleabble,当然还有密码!ssh主机密钥这个查找插件将生成一组2种格式的ssh主机密钥(rsa和ed25519)、匹配的dns条目、指纹和bubbleabble。您再也没有借口不让您知道主机文件已过期或支持旧的、不安全的主机密钥格式。GPG键这个查找插件允许您动态生成两组密钥。"常规"设置将生成一个主密钥(仅限cert)和3个子密钥,每个子密钥具有一个职责(sign、encr或auth)。生成的密钥的所有方面都可以检索,从keyid、指纹和keygrip到到期日期、私钥(装甲)当然还有密码。"备份"设置将生成两个主密钥,每个主密钥都有一个子密钥。一个只用于签名,另一个只用于加密。加密密钥将由签名密钥签名。同样,每个密钥的所有方面都将存储在保险库中,并且可以检索。凭证凭据与密码类似,但是它们在一个主要方面不同:凭据从不自动生成。我用它们来存储我的aws、gcp、api密钥和各种剧本所需的其他类型的外部凭证。

输出滤波器

在返回到你的剧本之前,上面的每个秘密都可以通过一个输出过滤器运行。如果选择需要salt的哈希算法,查找插件将自动为您生成一个唯一的salt,并将该salt存储在vault中,以确保每个后续的playbook运行都保持等幂性。对于secret、hostname和hash算法的每一种组合,都会生成一个唯一的salt并存储在请求的secret旁边,这样就可以很容易地找到它们,salt的重用也受到了尽可能多的限制。能够访问主机和服务。支持以下输出筛选器:

<表><广告>过滤/输出 说明 < /广告><正文>纯文本返回纯文本版本HEXSHA256返回SHA256哈希版本HEXSHA512返回SHA512哈希版本SHA256地下室返回crypt hashed和salted sha-256版本SHA512Crypt返回加密哈希和盐析的SHA-512版本PBKDF2SHA256返回经过哈希和盐析的pbkdf2 sha-256版本PBKDF2SHA512返回经过哈希和盐析的pbkdf2 sha-512版本grubpbkdfsha512返回特定于grub的pbkdf2哈希和盐渍sha-512版本phpass返回phpass哈希和盐析版本mysql41返回mysql41哈希版本PostgresMD5返回PostgreSQL哈希版本(使用"in"参数作为用户名argon2返回argon2哈希和盐析版本

要求

这些查找插件依赖于以下软件包:

<表><广告>名称最小版本评论< /广告><正文>答案这里不需要介绍Hashicorp保险库1.1.3仅支持KV存储引擎版本2国民生产总值2.1.17生成gpg密钥libgcrypt1.8.1GNUPG要求openssl1.1.1生成ssh密钥和ssh主机密钥腻子工具0.7.2将ssh密钥转换为各种格式巨蟒可能适用于其他版本,但未经测试

此外,还需要以下python包。这些应该自动安装,或者是默认python发行版的一部分。

<表><广告>python包 < /广告><正文>distutils时间passlib舒蒂尔子流程 Re/Td> OS暖通空调 随机包装argon2 cffi

安装

安装软件包

pip install ahvl

程序包很可能安装在ubuntu系统的/usr/local/lib/pythonx.x/dist packages/ahvl

升级包

pip install --upgrade ahvl

存储结构

默认情况下,这些查找插件在保险库的不同路径上存储不同的机密。

默认路径如下:

<表><广告>机密类型默认路径评论< /广告><正文>密码主机/{hostname}/{find}每个主机都存储常规密码,因此在不同的主机上有相同的"查找"将导致不同的密码sshkeysshkeys/{find}ssh密钥通常是每个用户的,并且通常不是每个主机唯一的sshhostkey主机/{hostname}/sshhostkeys显然,每个主机的主机密钥不同,因此存储在主机下gpgkeygpgkeys/{find}gpg密钥通常是每个用户的,并且通常不是每个主机唯一的凭证凭证/{find}凭证(aws、api密钥等)单独存储始终在与机密相同的路径上如果生成盐,它将始终存储在保险库中,以确保横穿管路的等幂性。salt的路径将基于secret的路径,具有相同的"in",但在末尾附加主机名、哈希类型和固定字符串"salt"

不需要向查找插件提供选项path,而是将对其进行计算。但是,如果希望具有不同的存储结构,则可以根据需要简单地更改基值。您可以在路径中使用变量{find}{hostname}。不过,请注意任何冲突的路径。盐的特定路径无法设置,并且将始终遵循上述规则。

使用默认设置,您将得到一个类似于下面的结构。最低级别将包含键/值组合。

+-secret/
  +-credentials/
    +-aws/
    +-gcp/
  +-hosts/
    +-srv1.example.com/
      +-sshhostkeys/
        +-ed25519/
        +-rsa/
      +-mariadb/
  +-sshkeys/
    +-myuser/
  +-gpgkeys/
    +-someusr/

示例

Hashicorp保险库连接

# ansible.cfg...# connection details for HashiVault lookup plugin[ahvl_connection]ahvl_url=https://192.168.1.100:8200ahvl_auth_method=tokenahvl_validate_certs=Trueahvl_cacert=/usr/local/share/ca-certificates/Netson_CA.crt
# /etc/environment...AHVL_CONNECTION_AHVL_TOKEN=<myvaulttoken>PASSLIB_MAX_PASSWORD_SIZE=16384 # to prevent error when using the hash function on (very) large passwords or keys

密码

---# playbook to demonstrate ahvl_password-hosts:localhostgather_facts:novars:output_filters:-plaintext-hexsha256-hexsha512-sha256crypt-sha512crypt-phpass-mysql41-postgresmd5-pbkdf2sha256-pbkdf2sha512-argon2-grubpbkdf2sha512tasks:# the path in vault which will be searched is [hosts/localhost/mariadb] on the default mountpoint-name:'ahvl_password:getpasswordforMariaDBaccountwithusernamemyuserandshowalloutputs'debug:msg:"{{lookup('ahvl_password',find='mariadb',in='myuser',out=item)}}"loop:"{{output_filters}}"-name:'ahvl_password:getpassword(length=8,type=phrase-willresultin8words)forMariaDBaccountwithusernameanotheruserandoutputthemysql41hash'debug:msg:"{{lookup('ahvl_password',find='mariadb',in='anotheruser',out='mysql41',pwd_length=8,pwd_type='phrase')}}"

ssh密钥

---# playbook to demonstrate ahvl_sshkey-hosts:localhostgather_facts:novars:ahvl_generate_sshkey:sshkey_pkcs8_enabled:yes# requires openssl 6.5+sshkey_putty_enabled:yes# requires puttygen 0.72+# PCKS8 and SSHCOM do not support Ed25519 keyssshkey_ed25519_in:-password-private-private_keybits-private_keytype-private_openssh-private_putty-public-public_rfc4716-fingerprint_sha256-fingerprint_sha256_clean-fingerprint_sha256_art-fingerprint_md5-fingerprint_md5_clean-fingerprint_md5_art-fingerprint_bubblebabble-fingerprint_bubblebabble_clean-fingerprint_puttysshkey_rsa_in:-password-private-private_keybits-private_keytype-private_pkcs8-private_openssh-private_putty-private_sshcom-public-public_pem-public_pkcs8-public_rfc4716-fingerprint_sha256-fingerprint_sha256_clean-fingerprint_sha256_art-fingerprint_md5-fingerprint_md5_clean-fingerprint_md5_art-fingerprint_bubblebabble-fingerprint_bubblebabble_clean-fingerprint_puttytasks:-name:'ahvl_sshkey:fetch/generateSSHkeyoftypeEd25519andoutputallinformationpieces'debug:msg:"{{lookup('ahvl_sshkey',find='myusername',in=item,out='plaintext')}}"loop:"{{sshkey_ed25519_in}}"-name:'ahvl_sshkey:rsa'debug:msg:"{{lookup('ahvl_sshkey',find='anotherusername',sshkey_type='rsa',in=item,out='plaintext')}}"loop:"{{sshkey_rsa_in}}"

ssh主机密钥

---# playbook to demonstrate ahvl_sshhostkey-hosts:localhostgather_facts:novars:sshhostkey_ins:-private-public-fingerprint_sha256-fingerprint_sha256_clean-fingerprint_sha256_art-fingerprint_md5-fingerprint_md5_clean-fingerprint_md5_art-fingerprint_bubblebabble-fingerprint_bubblebabble_clean-dns_sha1-dns_sha1_clean-dns_sha256-dns_sha256_cleantasks:# search path used for vault will be [hosts/localhost/sshhostkeys/rsa]-name:'ahvl_sshhostkey:lookupRSAhostkeyandoutputallpieces'debug:msg:"{{lookup('ahvl_sshhostkey',find='rsa',in=item,out='plaintext')}}"loop:"{{sshhostkey_ins}}"# search path used for vault will be [hosts/localhost/sshhostkeys/ed25519]-name:'ahvl_sshhostkey:lookupEd25519hostkeyandoutputallpieces'debug:msg:"{{lookup('ahvl_sshhostkey',find='ed25519',in=item,out='plaintext')}}"loop:"{{sshhostkey_ins}}"# search path used for vault will be [hosts/myhost2.local/sshhostkeys/rsa]-name:'ahvl_sshhostkey:lookupRSAforanotherhostandoutputallpieces'debug:msg:"{{lookup('ahvl_sshhostkey',find='rsa',in=item,sshhostkey_type='rsa',out='plaintext',hostname='myhost2.local')}}"loop:"{{sshhostkey_ins}}"

GPG键

---# playbook to demonstrate ahvl_gpgkey-hosts:localhostgather_facts:novars:gpgkey_regular_ins:-master_cert_pub_key_armored-master_cert_sec_key_armored-master_cert_sec_keytype-master_cert_sec_keyuid-master_cert_sec_password-master_cert_sec_fingerprint-master_cert_sec_keycurve-master_cert_sec_keygrip-master_cert_sec_keybits-master_cert_sec_creationdate-master_cert_sec_keyid-master_cert_sec_expirationdate-subkey_sign_sec_key_armored-subkey_sign_sec_fingerprint-subkey_sign_sec_keycurve-subkey_sign_sec_keygrip-subkey_sign_sec_keybits-subkey_sign_sec_creationdate-subkey_sign_sec_keyid-subkey_sign_sec_expirationdate-subkey_encr_sec_key_armored-subkey_encr_sec_fingerprint-subkey_encr_sec_keycurve-subkey_encr_sec_keygrip-subkey_encr_sec_keybits-subkey_encr_sec_creationdate-subkey_encr_sec_keyid-subkey_encr_sec_expirationdate-subkey_auth_sec_key_armored-subkey_auth_sec_fingerprint-subkey_auth_sec_keycurve-subkey_auth_sec_keygrip-subkey_auth_sec_keybits-subkey_auth_sec_creationdate-subkey_auth_sec_keyid-subkey_auth_sec_expirationdategpgkey_backup_ins:-sign_master_cert_pub_key_armored-sign_master_cert_sec_key_armored-sign_master_cert_sec_keytype-sign_master_cert_sec_keyuid-sign_master_cert_sec_password-sign_master_cert_sec_fingerprint-sign_master_cert_sec_keycurve-sign_master_cert_sec_keygrip-sign_master_cert_sec_keybits-sign_master_cert_sec_creationdate-sign_master_cert_sec_keyid-sign_master_cert_sec_expirationdate-sign_subkey_sign_sec_key_armored-sign_subkey_sign_sec_fingerprint-sign_subkey_sign_sec_keycurve-sign_subkey_sign_sec_keygrip-sign_subkey_sign_sec_keybits-sign_subkey_sign_sec_creationdate-sign_subkey_sign_sec_keyid-sign_subkey_sign_sec_expirationdate-encr_master_cert_pub_key_armored-encr_master_cert_sec_key_armored-encr_master_cert_sec_keytype-encr_master_cert_sec_keyuid-encr_master_cert_sec_password-encr_master_cert_sec_fingerprint-encr_master_cert_sec_keycurve-encr_master_cert_sec_keygrip-encr_master_cert_sec_keybits-encr_master_cert_sec_creationdate-encr_master_cert_sec_keyid-encr_master_cert_sec_expirationdate-encr_subkey_encr_sec_key_armored-encr_subkey_encr_sec_fingerprint-encr_subkey_encr_sec_keycurve-encr_subkey_encr_sec_keygrip-encr_subkey_encr_sec_keybits-encr_subkey_encr_sec_creationdate-encr_subkey_encr_sec_keyid-encr_subkey_encr_sec_expirationdatetasks:# search path used for vault will be [gpgkeys/name_ed25519_localhost_myemail]-name:'ahvl_gpgkey:fetch/generateregulared25519keyandoutputallpieces'debug:msg:"{{lookup('ahvl_gpgkey',gpgkey_fullname='name_ed25519',gpgkey_email='myemail',in=item,out='plaintext')}}"loop:"{{gpgkey_regular_ins}}"# search path used for vault will be [gpgkeys/name_rsa_localhost_myemail]-name:'ahvl_gpgkey:fetchgenerateregularRSAkeyandoutputallpieces'debug:msg:"{{lookup('ahvl_gpgkey',gpgkey_type='rsa',gpgkey_fullname='name_rsa',gpgkey_email='myemail',in=item,out='plaintext')}}"loop:"{{gpgkey_regular_ins}}"# search path used for vault will be [gpgkeys/bckp_ed25519_localhost_myemail]-name:'ahvl_gpgkey:fetch/generatebackuped25519keyandoutputallpieces'debug:msg:"{{lookup('ahvl_gpgkey',gpgkey_keyset='backup',gpgkey_fullname='bckp_ed25519',gpgkey_email='myemail',gpgkey_comment=inventory_hostname,in=item,out='plaintext')}}"loop:"{{gpgkey_backup_ins}}"# search path used for vault will be [gpgkeys/bckp_rsa_localhost_myemail]-name:'ahvl_gpgkey:fetch/generatebackupRSAkeyandoutputallpieces'debug:msg:"{{lookup('ahvl_gpgkey',gpgkey_keyset='backup',gpgkey_type='rsa',gpgkey_fullname='bckp_rsa',gpgkey_email='myemail',gpgkey_comment=inventory_hostname,in=item,out='plaintext')}}"loop:"{{gpgkey_backup_ins}}"

凭证

pip install ahvl
0

配置选项

为了在配置这些查找插件的行为时提供最大的灵活性,有几种方法可以设置选项值,一种优先于另一种。它们的处理顺序如下。最低的数字将具有最高的优先级。显然,ansibe中定义的变量优先级也适用。有关详细信息,请参阅ansible docs

<表><广告>优先级 方法 示例 评论< /广告><正文>查找参数查找('ahvl_password',find='mysql'in='myuser',out='mysql41')环境变量ahvl_connection_ahvl_token=http://localhost:8200前缀变量ahvl_connection_ahvl_url:'http://localhost:8200'嵌套变量ahvl_连接:
ahvl_url:'http://localhost:8200'ansible.cfg[ahvl_connection]
ahvl_token:'yourtoken'仅支持AHVL连接详细信息默认值在查找插件中硬编码

AHVL保险库连接选项

每次查找都将至少生成一个到hashicorp保险库的请求。如果生成了新的机密,或者搜索路径不存在,将发出多个请求。可以设置以下连接详细信息:

<表><广告>选项名称必需值类型 可能值默认值注释< /广告><正文>ahvl_网址是字符串协议://fqdn:porthttp://localhost:8200ahvl_auth_方法是字符串令牌/用户密码/LDAP/批准令牌保险库身份验证方法ahvl_名称空间否字符串保管库机密名称空间ahvl_validate_certs否布尔值true/falsetrue验证保管库证书;如果不验证,则设置为false使用https连接;如果使用自签名证书,请在ahvl\u cacert中提供根证书安装点 否字符串秘密金库秘密挂载点ahvl_cacert否路径/fullpath/to/file.crt(自签名)用于验证https连接的证书ahvl_用户名否字符串保险库登录用户名;如果auth_方法是userpass/ldap,则必需 ahvl_密码否字符串保险库登录密码;如果auth_method是userpass/ldap,则为必需;强烈建议仅使用环境变量ahvl_connection_ahvl_password设置密码ahvl_角色id否字符串保险库登录角色ID;如果认可auth_方法,则必须输入ahvl_secret_id否字符串保险库登录机密ID;如果认可auth_方法,则必须输入ahvl_令牌否字符串保管库令牌;如果auth_method是token,则为必需;强烈建议仅使用环境变量ahvl_connection_ahvl_token设置令牌!

AHVL常规选项

这些选项适用于所有查找插件,可以(有时必须)为每个查找设置。除了ahvl_tmppath,这些选项不能全局设置。

<表><广告>选项名称必需值类型 可能值默认值注释< /广告><正文>主机名是fqdn库存主机名主机名可以/将用作搜索路径的一部分ahvl_tmppath否路径/fullpath/to/tmpdiransible生成的tmp路径注意:每次查找结束时都会删除tmppath!为了安全起见,请将此设置保留为空;ansible将提供一个随机的临时文件夹,可以安全地将其删除。查找是字符串find参数用作搜索路径的一部分是字符串取决于查找插件在给定的搜索路径中,确定要查找的键外是字符串明文/hexsha256/hexsha512/sha256crypt/sha512crypt/grubpbkdf2sha512/phpass/mysql41/postgresmd5/pbkdf2sha256/pbkdf2sha512/argon2hexsha512返回机密的格式。hex*、mysql41和postgresmd5格式提供一个散列,sha*和phpass函数将提供一个咸散列。每个主机名/秘密/散列组合都将有一个唯一的salt,salt也将存储在保险库中,以确保以后每次运行的playbook不会生成新的salt,从而导致"已更改"状态。对于每个哈希函数,将根据最佳实践自动确定正确的盐。路径否字符串{find}/{hostname}取决于查找插件用于在保险库中查找机密的实际搜索路径。如果未指定,则由查找插件确定。直接设置路径时,可以使用变量{find}和{hostname},在查询保险库之前,这些变量将被正确的值替换。自动生成否布尔值true/falsetrue当在保险库中找不到新机密或删除了最新版本的机密时,是否自动生成新机密续订否布尔值true/falsefalse强制更新机密,不管它是否已存在;不会更改自动生成选项的行为。使用此选项时请小心,因为此选项为真的每个查找都会触发它,尤其是在循环中!

ahvl查找密码选项

常规选项
<表><广告>选项名称默认值可用选项 < /广告><正文>路径主机/{hostname}/{find}
查找选项

但是,没有其他可用的选项,请同时检查"ahvl生成密码选项" rel="nofollow">ahvl生成密码选项部分!

ahvl查找ssh密钥选项

常规选项
<表><广告>选项名称默认值可用选项 < /广告><正文>路径sshkeys/{find}私有/密码/私有密钥/私有密钥类型/私有pkcs8/私有openssh/私有putty/私有sshcom/公共/公共密码8/公共密码RFC4716/指纹SHA256/指纹SHA256清除/指纹SHA256清除/指纹MD5清除/指纹MD5清除/指纹MD5清除/指纹泥/指纹泡泡桶/指纹泡泡桶
查找选项

但是,没有其他可用的选项,请检查ahvl generate ssh key options部分!

ahvl查找ssh主机密钥选项

常规选项
<表><广告>选项名称默认值可用选项 < /广告><正文>路径主机/{hostname}/sshhostkeys/{find}查找ed25519/rsa私有/私有密钥/私有密钥类型/指纹SHA256/指纹SHA256清除/指纹SHA256清除/指纹MD5清除/指纹MD5清除/指纹图像/指纹图像/指纹图像/DNS图像/DNS图像/DNS图像/DNS图像/DNS图像/DNS图像/DNS图像/公共图像
查找选项

但是,没有其他可用的选项,请检查ahvl generate ssh hostkey options部分也是!

AHVL查找GPG键选项

常规选项
<表><广告>选项名称默认值可用选项 < /广告><正文>路径gpgkeys/{find}查找gpgkey_keyset=backup时:ed25519/rsagpgkey_keyset=regular
master_cert_pub_key_armaned/master_cert_secu key_armaned/master_cert secu keytype/master_cert secu keyuid/master_cert secu password/master_cert secu指纹/主证书密钥曲线/主证书密钥夹/主证书密钥位/主证书密钥创建日期/主证书密钥ID/子键符号秒键指纹/子键符号秒键曲线/子键符号秒键抓取/子键符号秒键位/子键符号秒键创建日期/子键符号秒键ID/子键符号秒键过期日期/子键encr_secu key_armed/子键encr_secu fingerprint/子键encr_secu keycurve/子键encr_secu keygrip/子键encr_secu keybits/子键encr_secu creationdate/子键encr_secu keyid/子密钥加密密钥过期日期/子密钥认证密钥装甲/子密钥认证密钥指纹/子密钥认证密钥曲线/子密钥认证密钥夹/子密钥认证密钥位/子密钥认证密钥创建日期/子密钥验证安全密钥ID/子密钥验证安全密钥过期日期

whengpgkey\u keyset=backup
签名主密钥是否被保护/签名主密钥是否被保护/签名主密钥是否被保护/签名主密钥是否被保护/签名大师证书安全密钥/签名大师证书安全密钥/签名大师证书安全指纹/签名大师证书安全密钥曲线/签名大师证书安全密钥/签名大师证书/签名大师证书证书创建日期/签名大师证书证书证书密钥ID/签名大师证书证书密钥过期日期/签名大师密钥装甲/签名子密钥指纹/sign_subkey_sign_secu keygrip/sign_subkey_sign_secu keybits/sign_subkey_sign_secu creationdate/sign_subkey_sign_secu keyid/sign_subkey_sign_secu expirationdate/encr_master_cert_pu key_装甲>./encr_master_cert_secu key_armaned/encr_master_cert_secu key type/encr_master_cert_secu key uid/encr_master_cert_secu password/encr_master_cert_secu fingerprint/encr_master_cert_secu key curve/encr_master_cert_secu keygrip/encr_master_cert_secu keybits/encr_master_cert_secu creationdate/encr_master_cert_secu keyid/encr_master_cert_secu expirationdate/encr_subkey_encr_secu key_装甲>./encr_subkey_encr_secu指纹/encr_subkey_encr_secu密钥曲线/encr_subkey_encr_secu密钥夹/encr_subkey_encr_secu密钥/encr_subkey_encr_secu创建日期/encr_subkey_encr_secu密钥id/加密子密钥加密秒过期日期
查找选项
<表><广告>选项名称r等同< < 值类型 可能值默认值注释< /广告><正文>gpgkey_全名是字符串键的全名gpgkey_电子邮件是字符串通过电子邮件获取密钥gpgkey_评论否字符串注释键;如果未提供,则默认为主机名gpgkey_uid否字符串键的uid;如果未提供,则默认为<;gpgkey_fullname>;\ult;gpgkey_comment>;\ult;gpgkey_email>;gpgkey_键集是字符串常规/备份常规要生成的键集

但是,没有其他可用的选项,请同时选中"ahvl generate gpg key options" rel="nofollow">ahvl generate gpg key options部分!

ahvl查找凭证选项

常规选项
<表><广告>选项名称默认值可用选项 < /广告><正文>路径凭证/{find}
查找选项

没有其他选项。

ahvl生成密码选项

<表><广告>选项名称必需值类型 可能值默认值注释< /广告><正文>pwd_类型是字符串单词/短语单词要生成的密码类型;单词或短语pwd_熵是字符串/公平/strong/安全安全密码强度;检查passlib文档中允许的值pwd_长度否整数32密码长度;如果省略,则根据熵自动计算密码字符否字符串生成密码时要使用的特定字符串密码字符集否字符串ascii-62/ascii-50/ascii-72/hexascii_72生成密码时要使用的特定字符集单词否字符串生成密码短语时要使用的单词列表单词集否字符串eff-long/eff-short/eff-u前缀/bip39eff_long生成密码短语时要使用的预定义单词列表;请检查passlib文档中允许的值普华永道九月否字符串密码短语的单词分隔符

ahvl生成ssh密钥选项

<表><广告>选项名称必需值类型 可能值默认值注释< /广告><正文>sshkey_类型是字符串ed25519/rsaed25519要生成的ssh密钥类型sshkey_位是整数4096ssh密钥的位数sshkey_用户名否字符串ssh key username;默认为查找如果未提供sshkey_评论否字符串sshkey comment;默认为用户名如果未提供sshkey_bin_keygen是路径ssh keygen binary的完整路径;如果未提供,则尝试查找ssh keygen sshkey_bin_openssl否路径puttygen binary的完整路径,用于pkcs8密钥格式;如果未提供,则尝试查找opensslsshkey_bin_puttygen否路径puttygen二进制文件的完整路径;未提供时尝试查找puttygen
。 sshkey_pkcs8_已启用否布尔值false使用openssl将密钥转换为pkcs8兼容密钥sshkey_putty_启用否布尔值false使用puttygen将键转换为putty/sshcom兼容键

ahvl生成ssh主机密钥选项

<表><广告>选项名称必需值类型 可能值默认值注释< /广告><正文>sshhostkey_类型是字符串ed25519/rsa生成主机密钥时要生成的密钥类型sshhostkey_强度是字符串中等/strongstrong主机键强度;有关实际值,请参见gen_sshhostkey函数sshhostkey_注释否字符串sshhostkey注释sshhostkey_bin_keygen是路径ssh keygen binary的完整路径;如果未提供,则尝试查找ssh keygen

ahvl生成gpg密钥选项

<表><广告>选项名称必需值类型 可能值默认值注释< /广告><正文>gpgkey_conf否列表 如GPG手册页所述['keyid-format 0xlong'、'with fingerprint'、'personal cipher preferences aes256'、'personal digest preferences sha512'、'cert digest algo sha512']包含操作密钥时将写入gpg.conf的选项。它将始终附加gpgkey_pref中定义的关键首选项 gpgkey_pref是列表 如GPG手册页所述['sha512'、'sha384'、'sha256'、'sha224'、'aes256'、'aes192'、'zlib'、'bzip2'、'zip'、'uncompressed']有关密码、摘要和算法的偏好gpgkey_摘要字符串SHA512与gpg选项一起使用--摘要算法gpgkey_s2k_密码否字符串AES256与GPG选项一起使用--S2K密码算法gpgkey_s2k_摘要否字符串SHA512与GPG选项一起使用--S2K摘要算法gpgkey_s2k_模式否整数3与GPG选项一起使用--S2K模式gpgkey_s2k_计数否整数6501712与GPG选项一起使用--s2k count;必须介于1024-6501712之间(包括1024-6501712)gpgkey_全名是字符串连接成类似uid的全名(注释)<;电子邮件>;gpgkey_电子邮件是字符串连接成类似uid的全名(注释)<;电子邮件>;gpgkey_评论否字符串连接成类似uid的全名(注释)<;电子邮件>;gpgkey_uid是字符串uidgpgkey_到期日是字符串0密钥到期日期,格式为[yyyy-mm-dd],[yyyymmddthhmms],秒=(int)gpgkey_位是整数4096密钥长度;仅由rsa密钥使用;将添加到rsa密钥的gpgkey_algo变量中gpgkey_类型是字符串ed25519/rsaed25519用于所有4个密钥(主密钥+3个子密钥)的主密钥类型;支持RSAgpgkey_bin是路径GPG二进制文件的完整路径gpgkey_键集是字符串常规/备份常规要生成的密钥集;常规密钥或备份密钥(即用于重复性)

ahvl生成盐选项

<表><广告>选项名称必需值类型 可能值默认值注释< /广告><正文>盐字符是字符串itoa64/alnumITOA64生成盐时使用的字符集;alnum是字母数字。ITOA64将/字符添加到alnum集合中

更新ahvl包说明

  • 创建工作目录mkdir/opt/ahvl&;cd/opt/ahvl
  • 确保已安装绳线pip安装绳线
  • 确保您的github ssh密钥可用
  • 登录githubssh-t git@github.com
  • 克隆存储库
  • 设置远程原点git远程设置url origin git@github.com:netson/ahvl.git
  • 根据需要进行更改
  • 删除任何可能存在的dist文件夹rm-rf./dist&;rm清单
  • 确定下一个pypi包版本号,查看https://github.com/netson/ahvl/releases
  • 更改setup.py中的版本和下载URL
  • 将更改提交到gitgit add。&;git commit-m"提交消息"
  • 按下主控键git push origin master
  • 在github上创建一个新版本,版本号与download\u url中的版本号相同
  • 创建pypi源发行版python setup.py sdist
  • 使用tween上传测试包tween upload--存储库url https://test.pypi.org/legacy/dist/*
  • https://test.pypi.org/manage/projects/
  • 上验证测试结果
  • 使用tween将包上载到pypitween upload dist/*
  • 输入您的用户名密码
  • 完成了!-()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在点击JButton触发的进程仍在处理时更新JLabel?   try-catch为什么Java有嵌套的try语句?   java SSH命令执行失败,出现异常“net.schmizz.sshj.connection.ConnectionException:引发连接重置异常”   java在ApacheCamel的接口类解析器中,resolveMandatoryClass(字符串名称)有什么用途?   java如何在Eclipse远程调试器中找到有问题的线程?   java线程:containerlaunch退出代码127的异常   lambda左连接Java中的2个对象列表   Swift 2.0协议扩展和Java/C抽象类之间有区别吗?   安卓改造:使用GSON将JSON解析为多个Java对象   Spring中服务层的java角色(澄清)   html Java与网站的通信   Spring boot rest api是在不创建java类的情况下将getResultList()转换为映射以显示响应的最佳方法吗?   使用“getElementById”从javascript获取值到java   java如何在文本视图中以粗体和多色显示文本   java是设置TextView颜色的最有效方法