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

解决本地Ubuntu通过Docker Compose远程部署应用的SSH权限问题

解决方案:通过Docker Compose远程部署应用

核心问题分析

出现ssh_askpass错误和权限拒绝,本质是Docker通过SSH连接远程服务器时,无法完成无交互的身份认证。安装ssh-askpass后弹出大量窗口,是因为Compose部署过程中会多次建立SSH连接,每次都需要手动输入密码,不仅繁琐还容易出错,根本解决办法是配置SSH免密登录。

具体配置步骤

1. 本地生成SSH密钥对(若未生成)

在本地Ubuntu 20.04终端执行:

ssh-keygen -t ed25519 -C "your_email@example.com"

按提示一路回车即可,默认会在~/.ssh/目录生成id_ed25519(私钥)和id_ed25519.pub(公钥)文件。

2. 将本地公钥上传至远程服务器

执行以下命令,替换user和X.X.X.X为你的远程服务器用户名和IP:

ssh-copy-id user@X.X.X.X

首次执行会要求输入远程用户的密码,输入后公钥会被添加到远程服务器的~/.ssh/authorized_keys文件中。

3. 验证SSH免密登录是否生效

在本地终端执行:

ssh user@X.X.X.X

如果不需要输入密码就能直接登录远程服务器,说明免密配置成功。

4. 确保远程用户拥有Docker操作权限

远程服务器上,将用户加入docker组:

sudo usermod -aG docker user

执行后需要重新登录远程服务器,或者在本地重新建立SSH连接,使组权限生效。

5. 配置DOCKER_HOST并部署应用

在本地终端临时设置环境变量(仅当前会话有效):

export DOCKER_HOST="ssh://user@X.X.X.X"

然后执行部署命令:

docker compose up -d

如果需要永久生效,可以将export DOCKER_HOST="ssh://user@X.X.X.X"添加到本地的~/.bashrc或~/.zshrc文件中,执行source ~/.bashrc(或对应shell的配置文件)使其生效。

额外排查点

  • 若仍出现权限问题,检查远程服务器~/.ssh/authorized_keys文件的权限:必须设置为600,~/.ssh目录权限为700,执行以下命令修复:
ssh user@X.X.X.X "chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
  • 检查远程服务器的sshd_config文件,确保PubkeyAuthentication设置为yes,若修改需重启sshd服务:
ssh user@X.X.X.X "sudo sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config && sudo systemctl restart sshd"

内容的提问来源于stack exchange,提问作者Max Dubrovin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:18:18