在Bash脚本中为Git提供密码

vshtjzan  于 2022-11-20  发布在  Git
关注(0)|答案(4)|浏览(152)

我想从Bash脚本提供一个密码。我已经尝试了以下方法:

echo 'mypass' | git pull

git pull < 'mypass'

git pull < echo 'mypass'

似乎都不管用。

t9eec4r0

t9eec4r01#

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

#!/bin/sh
exec echo "$GIT_PASSWORD"

1.将您的口令分配给GIT_PASSWORD环境变量

$ GIT_PASSWORD=your_password

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

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

mzmfm0qo2#

gitcredentials 就是 答案 :

    • 说明 * *

Git 有时 需要 用户 提供 凭据 才能 执行 操作 ;例如 , 它 可能 需要 请求 用户 名 和 密码 才 能 通过 HTTP 访问 远程 仓库 。 2 本 手册 描述 了 Git 请求 这些 证书 的 机制 , 以及 一些 避免 重复 输入 这些 证书 的 特性 。
[...]

    • 申请 证书 * *

如果 没有 定义 任何 凭据 助手 , Git 将 尝试 以下 策略 来 询问 用户 的 用户 名 和 密码 :
1.如果 设置 了 GIT_ASKPASS 环境 变量 , 则 调用 由 该 变量 指定 的 程序 。 在 命令 行 上 向 程序 提供 适当 的 提示 符 , 并 从 其 标准 输出 中 读取 用户 输入 。
1.否则 , 如果 设置 了 core.askPass 配置 变量 , 则 使用 其 值 , 如上 所 述 .
1.否则 , 如果 设置 了 SSH_ASKPASS 环境 变量 , 则 按 上述 方式 使用 其 值 。
1.否则 , 在 终端 上 提示 用户 。
[...]
另 一方面 , 凭证 助手 是 外部 程序 , Git 可以 向 其 请求 用户 名 和 密码 ;它们 通常 与 由 OS 或 其它 程序 提供 的 安全 存储 接口 。
您 可能 还 安装 了 第 三方 帮助 程序 ;在 git help -a 的 输出 中 搜索 credential-* , 并 参考 各个 助手 的 文档 。 一旦 你 选择 了 一 个 助手 , 你 可以 通过 将 其 名称 输入 到 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

中 的 每 一 个

5hcedyr0

5hcedyr03#

可以在遥控器的定义中包含密码,如下所示:

https://user:password@server

这样,您就不需要为每次提取提供它。
(Much类似于 How do I provide a username and password when running “git clone git@remote.git”? 中建议的解决方案。)

**警告:**更好的方法是使用SSH而不是HTTPS,并将公钥存储在GitHub中。因为远程url中的凭据可能会落在命令历史记录、脚本或配置文件中,然后可以被其他人看到。

nimxete2

nimxete24#

向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**,它会为我获取并提供正确的密码。
从Git 2.x开始,Git凭证助手是首选。
最近的一个(2022年)是微软(但跨平台)GCM (Git Credential Manager)
Git 2.39(Q4 2022)的文档现在除了密码之外还提到了 * token *:
参见M Hickford ( hickford )commit 54e95b4(2022年11月8日)。
(2022年11月14日,由Taylor Blau -- ttaylorr --commit dc8be39中合并)
我的天啊!提及密码备选项
签署人:M希克福德
签署人:泰勒·布劳
Git要求输入“密码”,但用户可能会使用个人访问令牌或OAuth访问令牌。
示例:

Password for 'https://AzureDiamond@github.com':

gitcredentials现在在其手册页中包括:
Git有时需要用户提供凭据才能执行操作;例如,它可能需要请求用户名和密码,以便通过HTTP访问远程存储库。

某些远程接受个人访问令牌或OAuth访问令牌作为密码。

本手册描述了Git用来请求这些凭证的机制,以及避免重复输入这些凭证的一些特性。

相关问题