Linux环境下通过Bash脚本SSH克隆Bitbucket仓库的认证问题
解决Bitbucket SSH克隆时的主机认证问题
咱们先搞清楚你遇到的这个错误到底是啥情况:当SSH第一次连接陌生主机时,会弹出提示让你确认主机的指纹,防止中间人攻击。但你的Bash脚本是非交互式执行的,没法手动确认,所以就抛出了「The authenticity of host 'bitbucket.org...' can't be established」这个错误。
下面给你几个可行的解决方案,按安全程度从高到低排列:
方案一:提前添加Bitbucket官方SSH指纹到known_hosts(推荐生产环境用)
这个方法最安全,直接把Bitbucket官方验证过的SSH指纹提前写入VM的~/.ssh/known_hosts文件,这样SSH就不会再弹出确认提示了。
你可以在Bash脚本里加入这行命令:
echo "bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==" >> ~/.ssh/known_hosts
上面这串是Bitbucket官方公布的RSA指纹,你完全可以放心用。
如果想自己验证指纹,也可以先在本地执行ssh-keyscan bitbucket.org获取,再把输出内容追加到known_hosts里,但要注意确保这个过程没有被中间人篡改。
方案二:临时禁用SSH严格主机检查(仅测试环境用)
这个方法简单粗暴,但非常不安全,因为它会跳过主机指纹验证,可能让你遭遇中间人攻击,所以只建议在测试环境临时用。
你可以在git clone命令前加上SSH参数,跳过检查:
GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no" git clone git@bitbucket.org:projectname-com/ansible.git
额外注意:确保SSH密钥权限正确
SSH对密钥文件的权限要求特别严格,权限太松会直接拒绝使用。所以在脚本里一定要加上这两行,设置正确的权限:
chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa # 这里替换成你实际的私钥路径
Terraform配置里的小细节
如果你是用Terraform的remote-exec执行脚本,记得先把私钥传到VM上,比如用file provisioner:
resource "aws_instance" "your_vm" { # 这里是你的VM基础配置,比如AMI、实例类型等 # 上传私钥到VM provisioner "file" { source = "/path/to/your/local/private_key" # 本地私钥路径 destination = "/home/your_user/.ssh/id_rsa" # VM里的路径,替换成你的用户名 } # 执行初始化脚本 provisioner "remote-exec" { inline = [ "chmod 700 ~/.ssh", "chmod 600 ~/.ssh/id_rsa", "echo 'bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==' >> ~/.ssh/known_hosts", "git clone git@bitbucket.org:projectname-com/ansible.git" ] } }
这样一套操作下来,你的脚本应该就能顺利克隆Bitbucket仓库了。
内容的提问来源于stack exchange,提问作者Daniel_FA
相关产品推荐
相关产品推荐

