Github Actions部署DigitalOcean Docker服务时出现SSH权限拒绝错误
问题排查与解决步骤
- 检查GitHub Actions的SSH私钥配置
你本地能正常连接是因为本地存储了对应服务器root用户的SSH私钥,但GitHub Actions的默认运行环境没有这组密钥,需要手动配置:- 打开对应GitHub仓库页面,进入「Settings」→「Secrets and variables」→「Actions」
- 点击「New repository secret」,名称设为
SSH_PRIVATE_KEY,值粘贴你本地~/.ssh/id_rsa(或者你用来连接服务器的对应私钥文件)的全部内容 - 在你的workflow文件中添加加载私钥的步骤,示例代码如下:
- name: 加载SSH私钥 uses: shimataro/ssh-key-action@v2 with: key: ${{ secrets.SSH_PRIVATE_KEY }} known_hosts: '147.182.255.130' - 检查服务器root用户的密钥授权
确认你本地使用的公钥已经添加到服务器/root/.ssh/authorized_keys文件中,且对应文件权限配置正确:chmod 700 /root/.ssh chmod 600 /root/.ssh/authorized_keys - 修正sshd配置冲突项
你当前sshd配置中UseLogin yes和公钥认证存在兼容性问题,会导致公钥认证失败,建议修改为:
修改后重启sshd服务生效:UseLogin nosudo systemctl restart sshd - 密码登录的适配方案
如果你不想用密钥登录,要在Actions中使用密码登录,需要先安装sshpass工具,再调整执行命令:
注意需要提前把root用户的登录密码添加到仓库Secrets中,名称设置为- name: 安装sshpass run: sudo apt update && sudo apt install -y sshpass - name: 部署服务 run: | sshpass -p ${{ secrets.SSH_ROOT_PASSWORD }} scp -o StrictHostKeyChecking=no -r ./.env ./docker-compose.prod.yml root@147.182.255.130:/app sshpass -p ${{ secrets.SSH_ROOT_PASSWORD }} ssh -o StrictHostKeyChecking=no root@147.182.255.130 << 'ENDSSH' cd /app source .env docker login ghcr.io -u $NAMESPACE -p $PERSONAL_ACCESS_TOKEN docker pull $WEB_IMAGE docker pull $NGINX_IMAGE docker-compose -f docker-compose.prod.yml up -d ENDSSH env: NAMESPACE: ${{ secrets.GHCR_NAMESPACE }} PERSONAL_ACCESS_TOKEN: ${{ secrets.GHCR_PAT }} WEB_IMAGE: ghcr.io/$(echo $GITHUB_REPOSITORY | tr '[:upper:]' '[:lower:]')/web NGINX_IMAGE: ghcr.io/$(echo $GITHUB_REPOSITORY | tr '[:upper:]' '[:lower:]')/nginxSSH_ROOT_PASSWORD。
内容的提问来源于stack exchange,提问作者Joseph Adam
相关产品推荐
相关产品推荐

