Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在脚本中使用Google应用程序特定的密码?_Python_Bash_Security_Google Authentication - Fatal编程技术网

Python 如何在脚本中使用Google应用程序特定的密码?

Python 如何在脚本中使用Google应用程序特定的密码?,python,bash,security,google-authentication,Python,Bash,Security,Google Authentication,由于在Google上启用了双因素身份验证(也称为2步验证),我的方法不再有效。计算机是经过验证和信任的,但不知何故脚本不是。实际上,每次运行cron作业时,我都会收到一个新的“Google验证码”,脚本就会失败。我认为使用wget或curl一次性验证这些脚本应该是一件简单的事情,但是我找不到任何关于如何进行验证的文档 Google身份验证方案已经经过多次迭代,我似乎无法再使用curl或mechanicalsoup登录。我尝试过使用像https://accounts.google.com/Ser

由于在Google上启用了双因素身份验证(也称为2步验证),我的方法不再有效。计算机是经过验证和信任的,但不知何故脚本不是。实际上,每次运行cron作业时,我都会收到一个新的“Google验证码”,脚本就会失败。我认为使用
wget
curl
一次性验证这些脚本应该是一件简单的事情,但是我找不到任何关于如何进行验证的文档



Google身份验证方案已经经过多次迭代,我似乎无法再使用
curl
mechanicalsoup
登录。我尝试过使用像
https://accounts.google.com/ServiceLogin?continue=https://calendar.google.com/calendar/exporticalzip&Email=username@gmail.com&Passwd=application-specific password
,我总是被重定向到一个登录页面,通常带有消息“请使用您的帐户密码,而不是特定于应用程序的密码。”

生成一个.,。

要使特定于应用程序的密码适用于我的脚本,您所要做的就是创建密码,然后在您的脚本中输入特定于应用程序的密码

有关特定于应用程序的密码的更多信息,请参见此处:


希望这会有所帮助!!

您是否绝对确定要在shell脚本中使用双因素身份验证?如果是这样,您不需要尝试将计算机或脚本设置为“受信任”。您只需在每次运行脚本时执行完整的双因素身份验证即可

如果目标是跳过手动第二因素身份验证,我建议使用特定于应用程序的密码(正如其他答案所建议的那样)。只需假装您根本没有使用双因素身份验证,并使用您的真实登录名,但将密码设置为在(子页)生成的密码

其目的是将特定于应用程序的密码“Name”设置为对您有意义的值。例如,我有标记为“Pidgin at work”、“My Android Phone”、“Thunderbird Google Address Book Extension at work”等的密码。您可以为“日历和读卡器导出脚本”设置一个密码。如果您认为此特定于应用程序的密码已被泄露(“泄漏”),只需点击同一页面上的“撤销”链接,然后为您的脚本生成新密码

对于代码,只需使用与Google single factor auth一起使用的最新版本更新:因为原始问题使用了URL
https://accounts.google.com/ServiceLogin
启动会话登录实际上是假装浏览器登录。然而,谷歌并没有正式支持这一点,在我写这篇文章的时候,似乎使用特定于应用程序的密码进行正常登录会出现错误消息“请使用您的帐户密码,而不是特定于应用程序的密码”

关于Google 2-factor auth和“trusted computer”,需要了解的一点是,实际的实现只是在浏览器中添加了一个有效期为30天的永久cookie。受信任的计算机并不意味着您的IP地址受信任或创建了其他神奇的连接。除非您的脚本从您选择的浏览器中捕获“受信任的计算机”cookie,否则您是否将计算机标记为受信任的并不重要。(谷歌表单不应该说“记住这台电脑30天”,而是“信任这台浏览器和用户帐户组合30天(保存永久cookie)”。不过,我想这被认为是太技术化了……)

更新:(从我下面的评论中复制)唯一官方支持的方法(服务器到服务器应用程序)记录在。它需要OAuth/JWT对请求进行编码,并使用在创建的服务帐户私钥。作为替代方案,您可以使用ClientLogin身份验证(2015年之前已弃用的尽力而为服务)


如果您决定使用OAuth,您可能需要查看并且

我的python脚本停止发送电子邮件,因此我生成了特定于应用程序的密码,更改了我的脚本实用程序gmail帐户(例如。,myscriptutility@gmail.com)然后成功使用该密码(例如“applicationpassw”)通过下面的python脚本片段(抱歉,没有完整的示例)


因此,至少在Windows 10上的python 3.6.5中,您需要做的就是在帐户和应用程序中使用十六字符的应用程序特定密码。

您应该尝试使用OAuth2,而不是这种过时的方法,这样验证令牌就不那么麻烦了。@Tim:有没有关于如何在shell脚本中使用它的指南?的规范说明了如何使用它。我认为
curl
也许可以做https的事情,让你用
--raw
传递请求?或者curl有适合这种类型的选项吗?@ams:有任何示例或教程吗?我不知道如何从shell脚本中实现它。很多谷歌搜索都没有发现一个能够进行两步验证的shell脚本。请查看链接-这是一个使用随机生成的密码进行的一步验证,专门用于与两步验证不兼容的应用程序。“如果您是Google Apps API开发人员并使用ClientLogin身份验证“-据我所知,我不知道-使用的是
ServiceLoginAuth
,简单地用特定于应用程序的密码替换密码是行不通的。我不知道你是否可以用那种方式登录。您可能会使用一次性代码,但这不是很舒服;或者通过浏览器登录,并在脚本中使用cookie,但最好的方法可能是修改脚本以使用其他登录选项(与正常的web身份验证没有太大区别,但正如Tim所指出的,它已被弃用)。已尝试过,但未接受请求。你有吗
email = SMTPHandler(mailhost=('smtp.gmail.com',587),
    fromaddr='anyaddress@mail.homeserver',
    toaddrs=['whoiwanttomailto@gmail.com'],
    subject= webSite + ' not working',
    credentials=('myscriptutility@gmail.com','applicationpassw'),
    secure=())
logger.addHandler(email)