Git新手用Bitbucket Pipelines部署时遇私钥文件未保护警告
解决Bitbucket Pipelines中「WARNING: UNPROTECTED PRIVATE KEY FILE!」的问题
这个警告是SSH的安全机制在起作用——它要求私钥文件的权限必须严格限制为仅所有者可读可写(也就是权限值600),如果权限太开放(比如其他用户也能读取),就会弹出这个警告,甚至可能直接拒绝建立连接。针对Bitbucket Pipelines的场景,你可以按以下方式解决:
1. 直接修改私钥文件权限(适用于密钥已存在于构建环境中)
如果你的私钥是作为文件存在于代码库或者构建镜像里,在使用它之前先加一行修改权限的命令:
script: # 先调整私钥权限为600 - chmod 600 ./path/to/your-private-key.pem # 然后执行你的部署命令,比如SSH连接远程服务器 - ssh -i ./path/to/your-private-key.pem your-user@remote-server "your-deploy-script.sh"
2. 从Bitbucket变量读取密钥后调整权限(更安全的做法)
通常推荐把私钥存在Bitbucket的Repository Variables里(避免把密钥提交到代码库),这时候需要先把变量内容写入文件,再修改权限:
script: # 把变量中的私钥写入本地文件 - echo "$SSH_PRIVATE_KEY" > ./deploy-key # 严格限制文件权限 - chmod 600 ./deploy-key # 用这个密钥连接服务器部署 - ssh -i ./deploy-key your-user@remote-server "git pull && restart-service"
3. 带密码的私钥:用ssh-agent管理
如果你的私钥设置了密码(passphrase),直接用上面的方法会卡在输入密码的步骤,这时候可以用ssh-agent来自动处理:
script: # 启动ssh-agent - eval $(ssh-agent -s) # 将私钥添加到agent(这里不需要手动改权限,ssh-add会自动处理安全权限) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - # 直接连接服务器部署 - ssh your-user@remote-server "your-deploy-commands"
额外提示
- 本地生成私钥时,SSH默认会把权限设为
600,不要手动修改成更开放的权限后再上传到Bitbucket变量。 - 有些Docker镜像的默认umask设置可能会导致新创建的文件权限过宽,所以手动执行
chmod 600是最稳妥的做法,不管环境如何都能保证权限符合要求。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

