<p>您确定要对shell脚本使用2-factor auth吗?如果是的话,你就不需要试着让你的电脑或脚本成为“可信的”。每次运行脚本时,只需执行完整的2-factor auth。</p>
<p>如果目标是跳过手动第二因子验证,我建议改用特定于应用程序的密码(正如其他答案已经建议的那样)。<strong>假设您根本没有使用2-factor auth,并使用您的真实登录名,但将密码设置为在<a href="https://accounts.google.com/b/0/IssuedAuthSubTokens?hl=en" rel="nofollow">https://accounts.google.com/b/0/IssuedAuthSubTokens?hl=en</a>(第<a href="https://www.google.com/settings/security" rel="nofollow">https://www.google.com/settings/security</a>子页)生成的密码。</p>
<p>其目的是将特定于应用程序的密码“Name”设置为对您有意义的值。例如,我有标记为“Pidgin at work”、“My Android Phone”、“Thunderbird Google地址簿扩展at work”等的密码。您可以有一个用于“日历和阅读器导出脚本”的密码。如果您认为这个特定于应用程序的密码被泄露了,只需点击同一页上的“撤销”链接,然后为脚本生成一个新密码。</p>
<p>对于代码,只需使用与Google single factor auth一起工作的最后一个版本。<strong>更新:</strong>因为原始问题使用URL <code>https://accounts.google.com/ServiceLogin</code>来启动会话登录,这实际上是伪造浏览器登录。然而,Google并没有正式支持这一点,在我写这篇文章的时候,使用特定于应用程序的密码进行正常登录似乎会出现错误消息“请使用您的帐户密码,而不是特定于应用程序的密码”。</p>
<p>关于Google 2-factor auth和“可信计算机”,有一点需要理解,实际的实现只是在浏览器中添加了一个具有30天到期时间的永久cookie。受信任的计算机并不意味着你的IP地址是受信任的,或者其他神奇的连接是被创建的。除非您的脚本从您选择的浏览器中捕获“受信任的计算机”cookie,否则您是否将计算机标记为受信任的根本不重要。(Google表单不应该说“记住这台计算机30天”,而应该说“信任这台浏览器和用户帐户组合30天(保存永久cookie)”。不过,我想这被认为太技术化了……)</p>
<p><strong>更新:</strong>(从下面的注释复制)唯一官方支持的方法(服务器到服务器的应用程序)记录在<a href="https://developers.google.com/accounts/docs/OAuth2ServiceAccount" rel="nofollow">https://developers.google.com/accounts/docs/OAuth2ServiceAccount</a>。它要求OAuth/JWT对请求进行编码,并使用在<a href="https://code.google.com/apis/console" rel="nofollow">https://code.google.com/apis/console</a>创建的服务帐户私钥。作为替代方案,您可以使用ClientLogin身份验证(在2015年之前已经被弃用,best effort service)。</p>
<p>如果您决定使用OAuth,您可能需要查看<a href="http://blog.yjl.im/2010/05/bash-oauth.html" rel="nofollow">http://blog.yjl.im/2010/05/bash-oauth.html</a>和<a href="https://github.com/oxys-net/curl-oauth" rel="nofollow">https://github.com/oxys-net/curl-oauth</a></p>