在Bash脚本中向Git提供密码

时间:2015-07-04 08:24:47

标签: git bash

从Bash脚本我想提供密码。我尝试过以下方法:

echo 'mypass' | git pull

git pull < 'mypass'

git pull < echo 'mypass'

似乎无效。

4 个答案:

答案 0 :(得分:5)

gitcredentials就是答案:

  

<强>描述

     

Git有时需要用户提供凭据才能执行操作;例如,它可能需要请求用户名和密码才能通过HTTP访问远程存储库。本手册介绍了Git用于请求这些凭据的机制,以及一些避免重复输入这些凭据的功能。

[...]

  

申请证书

     

如果没有定义任何凭证助手,Git将尝试以下策略向用户询问用户名和密码:

     
      
  1. 如果设置了GIT_ASKPASS环境变量,则调用该变量指定的程序。在命令行上为程序提供了一个合适的提示,并从其标准输出中读取用户的输入。
  2.   
  3. 否则,如果设置了core.askPass配置变量,则使用其值如上所述。
  4.   
  5. 否则,如果设置了SSH_ASKPASS环境变量,则使用其值如上所述。
  6.   
  7. 否则,将在终端上提示用户。
  8.   

[...]

  另一方面,凭证助手是外部程序,Git可以从中请求用户名和密码;它们通常与操作系统或其他程序提供的安全存储接口。

     

您可能还安装了第三方帮助程序;在credential-*的输出中搜索git help -a,并查阅各个帮助者的文档。选择帮助程序后,您可以通过将其名称放入credential.helper变量来告诉Git使用它。

git help -a | grep credential-*显示以下帮助程序:

  credential                remote
  credential-cache          remote-ext
  credential-cache--daemon  remote-fd
  credential-osxkeychain    remote-ftp
  credential-store          remote-ftps

答案 1 :(得分:3)

应该可以在远程定义中包含密码(即https://user:password@server),然后您不需要为每次拉动提供密码。与 How do I provide a username and password when running “git clone git@remote.git”? 中建议的解决方案非常相似。

我不确定这是否与您的用例匹配,但另一种有效方法是使用SSH而不是HTTPS并使用Gi​​tHub存储您的公钥。在这种情况下,您不需要输入任何凭据......

答案 2 :(得分:1)

将输入提供给Bash脚本的主要技巧是Automatically enter input in command line

echo 'mypass' | git pull
# or
printf 'mypass\n' | git pull

从Git 1.8.3开始,我更喜欢使用 Git credential netrc helper 来获取并为我提供正确的密码。

答案 3 :(得分:1)

  1. 创建包含内容的文件git_password.sh

    #!/bin/sh
    exec echo "$GIT_PASSWORD"
    
  2. 将密码分配给GIT_PASSWORD环境变量

    $ GIT_PASSWORD=your_password
    
  3. 使用GIT_ASKPASS环境变量执行git命令。它将强制输入密码提示并作为回调执行git_password.sh:

    $ GIT_ASKPASS=./git_password.sh git clone $REPO