基于application_git cookbook自定义Git克隆的部署密钥与SSH包装器路径
解决Chef application_git 1.1.0的部署密钥与SSH包装器配置问题
我来帮你搞定这个Chef配置问题,咱们一步步调整来解决你的三个需求——毕竟application_git和旧版application cookbook的git配置逻辑确实有不少变化:
1. 自定义部署密钥路径
application_git支持通过deploy_key_path直接指定密钥文件的绝对路径,如果你已经有生成好的密钥文件,直接配置这个参数就行;如果需要从数据袋/属性加载密钥内容同时指定存储路径,可以结合deploy_key和deploy_key_path一起用:
# 情况1:直接使用已存在的密钥文件 application 'accounts' do action :deploy path '<somepath>' owner 'nobody' group 'nogroup' git do repository '<repopath>' revision '<value>' deploy_key_path '/opt/keys/accounts_deploy_id_rsa' # 替换成你的密钥绝对路径 end end # 情况2:从数据袋加载密钥内容并指定存储路径 deploy_key_content = data_bag_item('secrets', 'deploy_keys')['accounts'] application 'accounts' do action :deploy path '<somepath>' owner 'nobody' group 'nogroup' git do repository '<repopath>' revision '<value>' deploy_key deploy_key_content deploy_key_path '/opt/keys/accounts_deploy_id_rsa' # 密钥会被写入这个路径 end end
2. 配置SSH包装器的自定义内容
如果需要修改包装器的默认逻辑(比如跳过主机密钥检查、指定密钥路径),可以用ssh_wrapper参数传入自定义脚本内容,比如:
application 'accounts' do action :deploy path '<somepath>' owner 'nobody' group 'nogroup' git do repository '<repopath>' revision '<value>' deploy_key_path '/opt/keys/accounts_deploy_id_rsa' # 自定义SSH包装器内容,强制使用指定密钥并跳过主机校验 ssh_wrapper <<-EOF #!/bin/bash exec ssh -o StrictHostKeyChecking=no -i #{deploy_key_path} "$@" EOF end end
3. 修改SSH包装器的生成路径
默认包装器会生成在部署目录的.chef/ssh_wrapper.sh,要指定自定义路径用ssh_wrapper_path参数就行,配合自定义内容的写法如下:
application 'accounts' do action :deploy path '<somepath>' owner 'nobody' group 'nogroup' git do repository '<repopath>' revision '<value>' deploy_key_path '/opt/keys/accounts_deploy_id_rsa' ssh_wrapper_path '/opt/wrappers/accounts_ssh_wrapper.sh' # 替换成你的包装器绝对路径 ssh_wrapper <<-EOF #!/bin/bash exec ssh -o StrictHostKeyChecking=no -i #{deploy_key_path} "$@" EOF end end
关键注意事项
- 确保密钥和包装器所在的目录对
nobody:nogroup有读写/执行权限,否则Chef无法写入或执行这些文件; - 如果你直接使用
application_git独立资源(而非application内的git子块),写法类似:
application_git 'accounts' do path '<somepath>' owner 'nobody' group 'nogroup' repository '<repopath>' revision '<value>' deploy_key_path '/opt/keys/accounts_deploy_id_rsa' ssh_wrapper_path '/opt/wrappers/accounts_ssh_wrapper.sh' ssh_wrapper <<-EOF #!/bin/bash exec ssh -o StrictHostKeyChecking=no -i #{deploy_key_path} "$@" EOF end
这样调整后,密钥和SSH包装器就会生成在你指定的位置,且包装器内容也符合需求了。
内容的提问来源于stack exchange,提问作者Arora20
相关产品推荐
相关产品推荐

