【问题标题】:using git send-mail with google 2-factor authentication使用 git send-mail 和谷歌 2 因素身份验证
【发布时间】:2014-05-30 13:38:13
【问题描述】:

我想使用git send-mail 向上游提交补丁,但我的 gmail 帐户使用的是两因素身份验证。 Google 为此类事情提供了特定于应用程序的密码,但我的问题是在哪里可以安全地存储此密码以供 git send-mail 使用?

【问题讨论】:

标签: git gmail two-factor-authentication


【解决方案1】:

原来 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-credentialgit-imap-send 的支持从 git 2.1.0 开始提供。

【讨论】:

  • 更新:该补丁最初包含在 Git 2.1.0 中。
【解决方案2】:

您可以使用普通的 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 这样的东西应该可以解决问题。

当然,最后,唯一真正安全的存储密码的地方是在你的耳朵之间。

Source

【讨论】:

  • 我希望有一些更安全实用的东西。应该有人把 git 绑在钥匙圈上。我闻到周末项目的味道......
  • 你可以走加密文件路线并使用 gpg-agent 作为你的密钥环。
  • ...然后周末休息:)
  • 我第一次尝试这样做是使用类似的东西:git send-email --smtp-pass=`gpg2 --decrypt ~/encrypted-pass.gpg` the-patch,但是当邮件发送时,密码在进程列表中作为明文保留。我想我总是可以单独解密然后复制到剪贴板并让 git 提示,但我希望有一个按钮解决方案。如果我找到更好的方法,我会回复。
  • 我开始编写密钥环插件,源代码中的一些 cmets 引导我找到了已经存在的用于该功能的配置选项。详情见我的回答。
【解决方案3】:

对于那些不想为此使用 Gmail 密码的人,我写了一个使用 OAuth 2 授权的plug-in for git-send-email。它仅请求最低要求的权限(代表您发送电子邮件)并将 OAuth 令牌数据存储在 Windows 凭据存储中,就像 Git 凭据管理器一样。

更新:Google 有一个plug-in,它以类似的方式工作,但将凭据保存在文件中,并且使用较少限制的令牌(所有 Gmail 与仅代表您发送电子邮件)。不过它可以在 Linux 上运行。

【讨论】:

    【解决方案4】:

    Git 2.0.x/2.1(2014 年第三季度)将支持 git credential 用于 git imap-send
    Dan Albert (DanAlbert) 中看到commit 791643a,现在合并到git/git master 分支:

    imap-send:使用 git-credential

    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 dbba42bcommit 19079b3commit 690307fcommit 200bc38(2017 年 9 月 14 日)。
    (由 Junio C Hamano -- gitster -- 合并到 commit b67f154,2017 年 9 月 25 日)

    "git imap-send" 有我们自己的协议实现,也 可以使用更新的 libCurlimap 协议支持。
    更新后者,使其可以使用凭证子系统,然后 使其成为使用的默认选项,以便我们最终弃用并删除前者。


    在 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 启用它。

    【讨论】:

    • 不确定你是否注意到,但你刚刚用我写的补丁回答了我的问题;)
    • @DanAlbert 我实际上没有。我赞成您发布该补丁的帖子。那里做得很好;
    猜你喜欢
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 2018-07-23
    • 2021-10-03
    • 2021-06-04
    相关资源
    最近更新 更多