我一周前开始使用 Ansible,很抱歉,如果这是一个简单的问题,我没有这方面的经验...
我的问题是我需要使用 Ansible 开发软件部署解决方案,其他开发人员将来可以轻松使用。 在这个解决方案中,需要下载一个 Git 存储库,其中包含一个 VagrantFile,然后创建一个安装 Ansible 的 Vagrant box,其中 Ansible 配置为使用 jumpserver 和网关连接到 Hadoop 集群。
为了连接到公司的环境,可以使用 SSH key 或用户/密码(开发人员有自己的开发人员帐户),所以我决定生成用于开发的 SSH key ,我在 Ansible 中使用以下方式:
库存文件:
[company_jumpserver]
IP.ADDR.OF.COMP ansible_ssh_private_key_file=~/.ssh/id_rsa
[company_gateway]
GW_ALIAS ansible_ssh_private_key_file=~/.ssh/id_rsa ansible_ssh_common_args='-o ProxyCommand="ssh -i ~/.ssh/id_rsa -W %h:%p DEV_USER_X@IP.ADDR.OF.COMP"'
[company_hadoop_edgenode]
EDGE_ALIAS ansible_ssh_private_key_file=~/.ssh/id_rsa ansible_ssh_common_args='-o ProxyCommand="ssh -i ~/.ssh/id_rsa -o ProxyCommand=\"ssh -i ~/.ssh/id_rsa DEV_USER_X@IP.ADDR.OF.COMP -W GW_ALIAS:22\" DEV_USER_X@GW_ALIAS -W EDGE_ALIAS:22"'
剧本yaml文件:
- name: Reach jumpserver
hosts: company_hadoop_edgenode
remote_user: DEV_USER_X
tasks:
- ping:
- command: hostname
register: out
- debug: msg="{{out.stdout_lines}}"
问题:
问题是我想安全地存储 SSH key ,不仅是为了我自己,也是为了任何开发人员(没关系,如果我稍后将他们的 SSH key 添加到 Ansible 配置中)。
由于将 SSH key 直接存储在 Git 存储库中不是一个好的模式,所以我研究了如何加密存储密码: https://docs.ansible.com/ansible/2.4/vault.html (该文档在某些情况下存在缺陷和错误)
现在我可以将任何 SSH 密码转换为加密格式,如下所示:
my_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
62313365396662343061393464336163383764373764613633653634306231386433626436623361
6134333665353966363534333632666535333761666131620a663537646436643839616531643561
63396265333966386166373632626539326166353965363262633030333630313338646335303630
3438626666666137650a353638643435666633633964366338633066623234616432373231333331
6564
但我不清楚为多个用户存储和使用加密 SSH key 的良好模式是什么。
以后如何将其他开发人员动态添加到 Ansible 配置中?
我应该如何重组我的 list 文件以使用可以验证自己的用户(现在我的 SSH key 的路径是硬编码的)。
我应该在这里使用什么样的变量(组/主机)?
我应该在哪里存储加密的 SSH key (或保险库变量)以获得灵活的解决方案?
我以后应该如何添加新的 SSH key ?
我更喜欢基于 --ask-vault-pass 而不是 --vault-id 的解决方案,因为在后一种情况下文档不准确。
感谢您的帮助!
最佳答案
为什么不用SSH的代理转发?您只需要在远程主机上安装公钥。您可能希望将这些公钥存储在您的 ansible 项目 git 存储库中,以便在新用户加入您的公司时轻松安装在新的基础设施/配置更新上。将此添加到您的 ansible.cfg 文件中。
[ssh_connection]
ssh_args = -o ForwardAgent=yes
但是如果您需要共享私钥,那您就大错特错了。
一些额外的background info关于 SSH 代理转发。
编辑:对评论的回答
如果您可以保证用户登录在整个基础架构中是相同的,并且您是用户工作站,那么以下操作是否可行:
- name: Reach jumpserver
hosts: company_hadoop_edgenode
remote_user: "{{ lookup('env', 'LOGIN') }}"
tasks:
- ping:
- command: hostname
register: out
- debug: msg="{{out.stdout_lines}}"
如果您不能保证,那么在我工作的地方,我们做了以下工作:我们有一个专用于用户的个人设置 的变量文件。它会在剧本中需要的任何地方导入。有存储的 API key 、凭据……源代码明智,它不在 git 中,只提供一个模板来帮助新手填写它。出于安全原因,我们要求我们的用户保存该文件。在下面的示例中,我将该文件命名为 company-member.yml:
- name: Reach jumpserver
hosts: company_hadoop_edgenode
remote_user: "{{ company_login }}"
vars_files:
- vars/company-member.yml
tasks:
# ...
在 company-member.yml 中:
company_login: my_personal_login
# And all other personal info and credentials
关于git - 安全地在 Git 存储库中存储 SSH key 的 Ansible 设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51427303/
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.
文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于