Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何将ssh密码添加到Docker并在使用后将其删除?_Git_Docker_Security_Ssh_Sshpass - Fatal编程技术网

Git 如何将ssh密码添加到Docker并在使用后将其删除?

Git 如何将ssh密码添加到Docker并在使用后将其删除?,git,docker,security,ssh,sshpass,Git,Docker,Security,Ssh,Sshpass,这个问题听起来很简单,但我找不到一个安全而简单的解决办法 问题如下,我有一个项目,我想从私有git repos中提取依赖项来构建一个运行时环境,然后删除SSH密钥和SSH密码。我不能跳过密码短语,因为它是由git remote repos强制执行的 我很难推送SSH密码短语,因此SSH不会要求密码短语 我很难理解如何安全地完成它 问题是我如何做到这一点,这样的方法也将是安全的 我在Docker中操作,可能会在其上安装任何开源软件。启用: docker构建有一个--ssh选项,允许docker引擎

这个问题听起来很简单,但我找不到一个安全而简单的解决办法

问题如下,我有一个项目,我想从私有git repos中提取依赖项来构建一个运行时环境,然后删除SSH密钥和SSH密码。我不能跳过密码短语,因为它是由git remote repos强制执行的

  • 我很难推送SSH密码短语,因此SSH不会要求密码短语
  • 我很难理解如何安全地完成它
  • 问题是我如何做到这一点,这样的方法也将是安全的

    我在Docker中操作,可能会在其上安装任何开源软件。

    启用:

    docker构建有一个--ssh选项,允许docker引擎转发ssh代理连接

    您可以
    ssh将您的私钥添加到
    ssh代理

    ssh添加
    man
    页面:

    如果任何文件需要密码短语,
    ssh add
    要求用户提供密码短语

    ssh代理
    man
    页面:

    其思想是代理在用户的本地PC、笔记本电脑或终端中运行。认证数据不需要存储在任何其他机器上,并且 身份验证密码短语永远不会通过网络传输。但是,到代理的连接是通过SSH远程登录转发的,用户可以 因此,请在网络中的任何位置使用身份赋予的权限 安全的方法

    ssh代理将永远不会通过其请求通道发送私钥

    文档中的示例
    Dockerfile

    # syntax=docker/dockerfile:experimental
    FROM alpine
    
    # Install ssh client and git
    RUN apk add --no-cache openssh-client git
    
    # Download public key for github.com
    RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts
    
    # Clone private repository
    RUN --mount=type=ssh git clone git@github.com:myorg/myproject.git myproject
    

    构建映像:
    docker Build--ssh default

    我通常做的是删除密码短语,克隆repo,然后将密码短语放回原位。我想你已经说得很清楚了,你的遥控器已经强制使用了密码短语,所以你不能删除它然后克隆?我的理解正确吗?是的,这正是问题所在。它是强制的,所以我必须克服它。我也不能控制组织的策略,我倾向于在Docker空间之外运行所有git操作。这避免了在图像中插入密钥的问题以及泄漏密钥的可能性;它允许我构建任意分支或工作代码;而且它避免了Docker不会重复运行git clone的问题,Docker认为它是幂等的。@DavidMaze在我的情况下它不起作用,因为SSH连接是为了构建git中的项目依赖关系。这意味着我将需要构建一个具有所有外部依赖项的项目,但本地机器、云和CI/CD管道中的本机环境可能不同,因此在这种情况下,我根本不会使用Docker的功能。它对Docker的使用提出了疑问,Docker不是我在这个项目中可以放弃的东西。将
    Dockerfile
    和其他工件放在存储库中<代码>git克隆…&&docker构建
    。您仍然可以从一致的源代码树中获得一致的结果。有一点需要注意,在Windows中,默认值不起作用,因此您需要指定完整过程
    default=C:/.ssh/id\u rsa
    (或您的
    id\u rsa
    文件位置)