【问题标题】:Execute git commands from container to host从容器到主机执行 git 命令
【发布时间】:2021-05-12 07:47:30
【问题描述】:

我想从我的容器向主机运行 git 命令。我正在更新的 git 文件夹位于主机上,我无法在我的容器中克隆它。我还希望将文件放在我的主机中,这样用户上传文件就不会很困难。

  • 主机
    • DockerContainer 1

我尝试过的事情:

  ssh -i /var/sshkeys Username@vmMaching.Domain.corp 'cd /var/www/scheduledqueries && git pull' 

输入代码时出现错误:

 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 @         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 Permissions 0755 for '/var/sshkeys' are too open.
 It is required that your private key files are NOT accessible by others.
 This private key will be ignored.
 Load key "/var/sshkeys": bad permissions
 Username@vmMaching.Domain.corp's password:
 Permission denied, please try again.
 Username@vmMaching.Domain.corp's password:
 error: cannot open .git/FETCH_HEAD: Permission denied

 root@200eea99abd9:/#

我将我的证书和密钥文件复制到一个位置,并将其列在我的 docker-compose 的卷部分中

【问题讨论】:

  • 对于需要修改宿主系统,并且需要特殊凭据的操作,直接在宿主系统上运行而不是在Docker中运行会容易得多。
  • @DavidMaze,是的。我在容器中安装了 rundeck,虽然我为站起来感到非常自豪,但编写脚本以访问主机变得非常乏味。 Rundeck 最好不要放在容器中。

标签: git docker ubuntu ssh


【解决方案1】:

第一部分纯ssh:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0755 for '/var/sshkeys' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/var/sshkeys": bad permissions

Git 与此消息无关。您使用参数-i 和路径名、用户和主机以及在服务器上运行一次的命令运行ssh。 ssh 本身决定忽略你的-i 以强制你修复文件的权限。

然后您输入密码,然后 ssh 在服务器上运行您要求它执行的命令。该命令——cd /var/www/scheduledqueries && git pull——成功地执行了cd /var/www/scheduledqueries。然后它运行git pull,这意味着运行git fetch,然后一旦运行,对刚刚获取的提交做一些事情something部分取决于你如何配置的 Git)。

fetch 操作失败,因为在服务器上,您登录的用户无权读取和/或写入该 Git 存储库中的 .git/FETCH_HEAD

要解决第一部分的投诉,请确保您的客户端上的文件(您将在其中运行 ssh)具有正确的权限,以便 ssh 愿意使用它(并且它具有正确的内容,以便ssh 确实使用它时,它可以工作——可能已经是这种情况;我们只知道ssh 没有使用它)。

要解决第二部分中的投诉,请确保您在服务器上登录的人(Username@vmMaching.Domain.corp)有权读取和写入.git 目录中的文件。通常,该用户应该拥有该目录,但在某些情况下,您可以进行设置,使该用户成为可以使用该目录的组的成员。设置对 Git 存储库的组范围访问有点棘手。

(请注意,如果您打算使用 Docker 只是为了运行某些特定服务,您可能希望完全在 Docker 之外设置该服务。这样您就不需要在服务器中执行任何 Git 操作in,因为它们在 docker 命令启动之前很久就已经完成了。)

【讨论】:

  • 哇,非常感谢您的解释!授予自己 .git 的权限。使用this。对如何授予权限感到困惑,遵循this 指南 现在看起来很干净:root@200eea99abd9:/var/sshkeys/.ssh# ssh -i /var/sshkeys/.ssh/vmName.Domain.corp.key user@ vmName.Domain.corp 'cd /var/www/scheduledqueries && git pull' 已经是最新的了。
猜你喜欢
  • 2015-10-21
  • 2015-04-07
  • 2020-07-28
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
相关资源
最近更新 更多