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

如何将Node项目部署至Digital Ocean Droplet?Push公钥权限问题求解

解决Dokku推送时Permission denied (publickey)的问题

你操作里最关键的错误是用sudo执行git push命令——sudo会让Git以root用户身份运行,这时候它会读取root的SSH密钥(默认在/root/.ssh/目录下),而不是你平时用来连接Droplet的个人用户密钥,Dokku服务器识别不了这个陌生的密钥,自然就抛出权限拒绝的错误了。

下面是具体的修复步骤:

  1. 清理错误的远程配置(如果有)
    先移除sudo添加的可能有问题的远程仓库:

    sudo git remote remove dokku
    

    然后用你平时连接Droplet的普通用户身份,重新添加Dokku远程仓库:

    git remote add dokku dokku@188.166.110.79:test
    
  2. 确保你的本地密钥能被Dokku用户识别
    先测试本地密钥是否能直接连接到Droplet的dokku用户:

    ssh dokku@188.166.110.79
    
    • 如果能成功登录,说明密钥没问题,直接跳到下一步;
    • 如果登录失败,需要把你的本地公钥(比如~/.ssh/id_rsa.pub里的内容)添加到Droplet上dokku用户的授权列表:
      1. 用你原来的方式SSH登录到Droplet(比如用root或你创建的个人用户);
      2. 切换到dokku用户:
        sudo su - dokku
        
      3. 创建并配置.ssh目录(如果不存在):
        mkdir -p ~/.ssh
        chmod 700 ~/.ssh
        
      4. 将你的本地公钥内容粘贴到授权文件:
        echo "你的本地公钥内容" >> ~/.ssh/authorized_keys
        chmod 600 ~/.ssh/authorized_keys
        
  3. 用普通用户身份执行推送
    去掉sudo,直接运行推送命令:

    git push dokku master
    
  4. 额外检查项

    • 确认Droplet上已经创建了名为test的Dokku应用:登录Droplet后执行dokku apps:list,如果没有的话先创建:
      dokku apps:create test
      
    • 确保本地Git仓库已经完成初始化和第一次提交:如果是新项目,先执行git init、git add .、git commit -m "initial commit"再推送。

内容的提问来源于stack exchange,提问作者Eli Levit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:37:50