如何将Node项目部署至Digital Ocean Droplet?Push公钥权限问题求解
解决Dokku推送时Permission denied (publickey)的问题
你操作里最关键的错误是用sudo执行git push命令——sudo会让Git以root用户身份运行,这时候它会读取root的SSH密钥(默认在/root/.ssh/目录下),而不是你平时用来连接Droplet的个人用户密钥,Dokku服务器识别不了这个陌生的密钥,自然就抛出权限拒绝的错误了。
下面是具体的修复步骤:
清理错误的远程配置(如果有)
先移除sudo添加的可能有问题的远程仓库:sudo git remote remove dokku然后用你平时连接Droplet的普通用户身份,重新添加Dokku远程仓库:
git remote add dokku dokku@188.166.110.79:test确保你的本地密钥能被Dokku用户识别
先测试本地密钥是否能直接连接到Droplet的dokku用户:ssh dokku@188.166.110.79- 如果能成功登录,说明密钥没问题,直接跳到下一步;
- 如果登录失败,需要把你的本地公钥(比如
~/.ssh/id_rsa.pub里的内容)添加到Droplet上dokku用户的授权列表:- 用你原来的方式SSH登录到Droplet(比如用root或你创建的个人用户);
- 切换到dokku用户:
sudo su - dokku - 创建并配置.ssh目录(如果不存在):
mkdir -p ~/.ssh chmod 700 ~/.ssh - 将你的本地公钥内容粘贴到授权文件:
echo "你的本地公钥内容" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
用普通用户身份执行推送
去掉sudo,直接运行推送命令:git push dokku master额外检查项
- 确认Droplet上已经创建了名为
test的Dokku应用:登录Droplet后执行dokku apps:list,如果没有的话先创建:dokku apps:create test - 确保本地Git仓库已经完成初始化和第一次提交:如果是新项目,先执行
git init、git add .、git commit -m "initial commit"再推送。
- 确认Droplet上已经创建了名为
内容的提问来源于stack exchange,提问作者Eli Levit
相关产品推荐
相关产品推荐

