为什么我不能将 echo 与 GIT_ASKPASS 一起使用

Nat*_*han 3 git sh

我试图通过 GIT_ASKPASS 为 git 提供密码,如下所示:

export PASSWORD=<secret>
export GIT_ASKPASS="/usr/bin/echo $PASSWORD"
git clone https://username@domain.com/git-repo/repo.git
Run Code Online (Sandbox Code Playgroud)

但我得到:

 error: cannot run /usr/bin/echo <secret>: No such file or directory
Run Code Online (Sandbox Code Playgroud)

所以看来我不允许在中给出参数GIT_ASKPASS

现在我可以创建一个只包含以下内容的脚本:

/usr/bin/echo $PASSWORD
Run Code Online (Sandbox Code Playgroud)

但我想知道:有没有一种方法可以在不创建临时脚本的情况下执行此操作?

Mel*_*ius 5

主要问题是整个变量被解释为程序名称。那么,制作另一个脚本,let\xe2\x80\x99s 调用它password_provider.sh,它会告诉我们密码呢?

\n\n
#! /bin/sh\necho <secret>\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后你可以运行:export GIT_ASKPASS="./password_provider.sh"

\n\n

安全须知

\n\n

请记住,这意味着以纯文本形式存储密码,这通常不是一个好的安全实践。您应该更喜欢公钥身份验证或真正的凭证助手

\n

  • 您可以删除“export”行,然后只“echo $PASSWORD”,因为这里的想法是从环境继承密码。但这使用的是脚本(不一定是*临时*脚本),因此可能与问题的精神背道而驰。:-) 它仍然非常不安全,因为可以查看其他进程的环境变量。最终需要的是一个“凭证助手”,OP 应该阅读这些内容。 (2认同)