解决本地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
相关产品推荐
相关产品推荐

