Chef Cookbook问题:Git克隆主机密钥验证失败求助
解决Chef Cookbook中Git Clone的Host Key Verification Failed错误
这个问题我之前处理过不少,本质是节点上的Git首次连接远程仓库(比如你的Stash服务器)时,没有将服务器的主机密钥添加到系统的known_hosts文件中,导致SSH连接被拒绝,最终git clone命令返回退出码128。下面给你几个可行的解决方案,按推荐优先级排序:
方案1:使用Chef内置的Git资源(推荐)
Chef的git资源是专门为版本控制仓库同步设计的,比手动用execute更可靠,还能直接处理SSH相关的配置。替换你现有的execute资源为以下代码:
git '/var/www' do repository '<REPOSITORY_URL>' # 替换为你的实际仓库地址 action :sync # 如果需要指定SSH密钥,还可以添加ssh_wrapper配置,比如: # ssh_wrapper '/etc/chef/git_ssh_wrapper.sh' end
如果你的Git服务器需要验证主机密钥,配合ssh_known_hosts资源提前添加信任的主机密钥:
# 先添加Git服务器的主机密钥到known_hosts ssh_known_hosts 'stash.yourdomain.com' do # 替换为你的Git服务器主机名 # 替换为你服务器的实际主机密钥,可以通过`ssh-keyscan stash.yourdomain.com`获取 host_key 'AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==' end # 再同步仓库 git '/var/www' do repository '<REPOSITORY_URL>' action :sync end
方案2:手动处理known_hosts后再执行clone
如果你坚持使用execute资源,需要先确保节点信任Git服务器的主机密钥。可以用Chef的execute资源先扫描并添加密钥:
# 先将Git服务器的主机密钥添加到root用户的known_hosts execute 'add stash host key to known_hosts' do command 'ssh-keyscan stash.yourdomain.com >> /root/.ssh/known_hosts' # 替换主机名 not_if 'grep -q stash.yourdomain.com /root/.ssh/known_hosts' # 避免重复添加 end # 再执行clone命令 execute 'clone files from stash' do command 'git clone <REPOSITORY_URL> /var/www' end
方案3:临时跳过密钥验证(不推荐生产环境)
如果只是临时测试,可以在git clone命令中添加StrictHostKeyChecking=no参数跳过验证,但这个方法会暴露中间人攻击的风险,生产环境绝对不要用:
execute 'clone files from stash' do command 'git clone -o StrictHostKeyChecking=no <REPOSITORY_URL> /var/www' end
补充提示
- 你可以通过
ssh-keyscan <你的Git服务器主机名>命令获取服务器的主机密钥,确保添加的密钥正确。 - 确保Chef运行的用户(通常是root)有
/var/www目录的读写权限,避免后续出现权限问题。
内容的提问来源于stack exchange,提问作者Williams Perdana
相关产品推荐
相关产品推荐

