首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有用户和密码的GIT_ASKPASS

具有用户和密码的GIT_ASKPASS
EN

Stack Overflow用户
提问于 2021-07-12 08:42:14
回答 1查看 3.6K关注 0票数 3

我在一个带有git --version 2.20.1的Docker容器中工作,基本映像是Debian 10,我希望使用GIT_ASKPASS或更好的配置属性core.askpass通过HTTPS克隆一个git存储库。以下是我尝试过的:

代码语言:javascript
运行
复制
GIT_ASKPASS=$(mktemp) && chmod a+rx $GIT_ASKPASS && export GIT_ASKPASS
cat > $GIT_ASKPASS <<< '#!/bin/bash
    exec printf "$JENKINS_CREDENTIALS_USR\n$JENKINS_CREDENTIALS_PSW\n"
'

最初我在Jenkins运行它,但我看到我能够在一个简单的码头容器中复制相同的问题。$JENKINS_CREDENTIALS_USR$JENKINS_CREDENTIALS_PSW的定义如下:

代码语言:javascript
运行
复制
JENKINS_CREDENTIALS_USR=myuser
JENKINS_CREDENTIALS_PSW=mypass
export JENKINS_CREDENTIALS_USR
export JENKINS_CREDENTIALS_PSW

我没有任何全局配置属性集。~/.git-credentials不存在。错误是:

代码语言:javascript
运行
复制
fatal: Authentication failed for 'https://myserver.com/git/project.git/' 

它的工作方式是在HTTPS url中指定用户名,如下所示

代码语言:javascript
运行
复制
git clone https://jenkins@myserver.com/git/project.git .

并且只在GIT_ASKPASS指出的脚本中打印密码,所以我想知道为什么没有url中的用户名它就不能工作。文档清楚地说

如果设置了GIT_ASKPASS环境变量,则调用该变量指定的程序。向命令行上的程序提供适当的提示,并从其标准输出中读取用户的输入。

因为当我试图克隆时,我被问到用户名和密码,原来的GIT_ASKPASS脚本有什么问题?

EN

Stack Overflow用户

回答已采纳

发布于 2021-07-13 08:00:35

我找到了解决方案这里。所有的学分都给了@AlexeyPelykh,我只是改编了他的剧本。

在尝试git clone时,我们的shell脚本会对每个提示行调用一次,基本上如下:

代码语言:javascript
运行
复制
$GIT_ASKPASS "Username for ..."
$GIT_ASKPASS "Password for ..."

我的原始脚本中的问题是,它返回用户名和密码都独立于我的要求。这也是为什么在第二种情况下(URL中指定的用户名),它可以工作,实际上我只需要密码,它只返回这个密码。

这就是我如何修改我的原始脚本,使它与GIT_ASKPASS一起工作。

代码语言:javascript
运行
复制
GIT_ASKPASS=$(mktemp) && chmod a+rx $GIT_ASKPASS && export GIT_ASKPASS
cat > $GIT_ASKPASS <<< '#!/bin/bash
case "$1" in
    Username*) exec echo "$JENKINS_CREDENTIALS_USR" ;;
    Password*) exec echo "$JENKINS_CREDENTIALS_PSW" ;;
esac
'

如果您想使用配置变量core.askPass,请用以下两行替换前两行:

代码语言:javascript
运行
复制
git_askPass_script=$(mktemp) && chmod a+rx $git_askPass_script
cat > $git_askPass_script <<< '#!/bin/bash

并将配置变量设置为:

代码语言:javascript
运行
复制
git config --global core.askPass "$git_askPass_script"

甚至更好

代码语言:javascript
运行
复制
git -c core.askPass="$git_askPass_script" clone ...
票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68344358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档