【发布时间】:2014-05-30 13:38:13
【问题描述】:
我想使用git send-mail 向上游提交补丁,但我的 gmail 帐户使用的是两因素身份验证。 Google 为此类事情提供了特定于应用程序的密码,但我的问题是在哪里可以安全地存储此密码以供 git send-mail 使用?
【问题讨论】:
标签: git gmail two-factor-authentication
我想使用git send-mail 向上游提交补丁,但我的 gmail 帐户使用的是两因素身份验证。 Google 为此类事情提供了特定于应用程序的密码,但我的问题是在哪里可以安全地存储此密码以供 git send-mail 使用?
【问题讨论】:
标签: git gmail two-factor-authentication
原来 git 有 a credential store。 Linux、OS X 和 Windows 都有凭据助手,可以从操作系统的密钥环中收集凭据。 This answer 有几个例子。
如果您希望将补丁程序保存到草稿文件夹中,以便在发送前查看它(或者只是为了让 Gmail 更好地跟踪线程),您可以执行以下操作:
git config --global imap.host imaps://imap.gmail.com
git config --global imap.user your.email@gmail.com
git config --global imap.port 993
git config --global imap.sslverify false
git config --global imap.folder [Gmail]/Drafts
git format-patch --stdout | git imap-send
git-credential 对 git-imap-send 的支持从 git 2.1.0 开始提供。
【讨论】:
您可以使用普通的 Git 配置来存储密码,如下所示:
git config --global sendemail.smtpencryption tls
git config --global sendemail.smtpserver mail.example.com
git config --global sendemail.smtpuser fred@example.com
git config --global sendemail.smtpserverport 587
git config --global sendemail.smtppass smbumqjiurmqrywm
当然,这将以纯文本形式存储密码。你应该确保你的 ~/.gitconfig 文件不被其他人读取。
您也可以将密码存储在加密文件中并使用它。您仍然需要记住并输入加密密码,但至少您可以选择该密码。像gpg2 这样的东西应该可以解决问题。
当然,最后,唯一真正安全的存储密码的地方是在你的耳朵之间。
【讨论】:
git send-email --smtp-pass=`gpg2 --decrypt ~/encrypted-pass.gpg` the-patch,但是当邮件发送时,密码在进程列表中作为明文保留。我想我总是可以单独解密然后复制到剪贴板并让 git 提示,但我希望有一个按钮解决方案。如果我找到更好的方法,我会回复。
对于那些不想为此使用 Gmail 密码的人,我写了一个使用 OAuth 2 授权的plug-in for git-send-email。它仅请求最低要求的权限(代表您发送电子邮件)并将 OAuth 令牌数据存储在 Windows 凭据存储中,就像 Git 凭据管理器一样。
更新:Google 有一个plug-in,它以类似的方式工作,但将凭据保存在文件中,并且使用较少限制的令牌(所有 Gmail 与仅代表您发送电子邮件)。不过它可以在 Linux 上运行。
【讨论】:
Git 2.0.x/2.1(2014 年第三季度)将支持 git credential 用于 git imap-send。
从Dan Albert (DanAlbert) 中看到commit 791643a,现在合并到git/git master 分支:
git-imap-send直接提示输入密码,而不是使用git-credential。另一方面,git-send-email支持git-credential。
对于使用双重身份验证的用户来说,这是一项必要的改进,因为他们不应该记住所有应用专用密码。
2017 年更新,对于 Git 2.14.x/2.15(2017 年第四季度),git imap-send 仍将发展。
参见Nicolas Morey-Chaisemartin (nmorey)commit dbba42b、commit 19079b3、commit 690307f、commit 200bc38(2017 年 9 月 14 日)。
(由 Junio C Hamano -- gitster -- 合并到 commit b67f154,2017 年 9 月 25 日)
"
git imap-send" 有我们自己的协议实现,也 可以使用更新的libCurl和imap协议支持。
更新后者,使其可以使用凭证子系统,然后 使其成为使用的默认选项,以便我们最终弃用并删除前者。
在 Git 2.30.1(2021 年第一季度)中,git send-email 文档已更新。
参见 Vasyl Vavrychuk (vvavrychuk) 的 commit 155067a(2021 年 1 月 7 日)。
(由 Junio C Hamano -- gitster -- 合并到 commit 788f488,2021 年 1 月 15 日)
git-send-email.txt:提到使用 Gmail 的应用访问不太安全签字人:Vasyl Vavrychuk
签字人:Denton Liu
Google 可能已经更改了 Gmail 的安全性,现在如果两因素身份验证未到位,则需要明确启用安全性较低的应用访问,否则发送电子邮件将失败并显示:
5.7.8 Username and Password not accepted. Learn more at 5.7.8 https://support.google.com/mail/?p=BadCredentials(谷歌:“I can't sign in to my email client”)
记录完成这项工作所需的步骤。[dl:清理提交消息并将建议合并到补丁中。]
git send-email 现在包含在其man page 中:
如果您在 Gmail 帐户上设置了多重身份验证,您将
git send-email 现在包含在其man page 中:
如果您的 Gmail 帐户没有设置多重身份验证, 您将需要允许不太安全的应用程序访问。访问 https://myaccount.google.com/lesssecureapps 启用它。
【讨论】: