You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:15:43