使用账号密码来操作github? NO!
简介
最近在更新github文件的时候,突然说不让更新了,让我很是困惑,原因是在2021年8月13号之后,github已经不让直接使用账号名密码来登录了,必须使用personal access token。今天给大家讲解一下怎么对这个token进行缓存。
背景介绍
github为了安全性考虑,在2020年7月就准备对所有需要使用身份认证的git命令切换成基于令牌的身份验证。并且从2021年8月13日开始,在 GitHub.com上对Git操作进行身份验证时将不再接受帐户密码。
这个改动只对使用用户名密码进行github交互的用户受影响。如果你使用的是SSH,或者之前就使用的是令牌,或者使用的是GitHub Desktop,那么不会有任何影响。
github做出这个决定主要是对于安全的考虑,明文的密码很容易被泄露,如果换成有时限的token,即使泄露了影响也会非常有限。
并且可以为同一个github账号根据不同的使用途径,生成不同的token,并且随时都可以控制token的有效状态和不同token代表的权限。最大限度的保证账号的安全性。
生成的token可随时撤销,并且令牌的随机性更高,不容易被暴力破解。
创建令牌
令牌,英文名叫做token,个人访问令牌英文简写为PAT。它是一种使用密码对 GitHub 进行身份验证的替代方法。
你可以将token看做是密码,不过这个token具有权限和有效时间的限制。同时为了安全起见,GitHub 会自动删除一年内未使用的个人访问令牌。 为了保证令牌的安全性,我们强烈建议为个人访问令牌添加过期时间。
要使用令牌首先需要创建令牌。怎么创建令牌呢?
首先登录github.com,在我的账号下方,选择settings:

然后在左侧边栏中,点击开发人员设置:

然后选择左边的个人访问令牌:

点击生成令牌按钮,就可以生成令牌了。

在创建过程中,我们需要输入和选择一些数据:

比如我们需要给这个token起个名字,用来区分不同的使用场景,还要选择一个过期时间,为了安全起见,这个过期时间不要太长。
最后,就是token对应的权限了,如果你只是对repository进行操作,选择repo即可。
这样一个令牌就创建好了。
注意,创建好的令牌需要及时保存,因为后续也不能再从网页上查看该令牌的内容。令牌的保存需要和密码的保存一样注意安全。
使用令牌
上面我们提到了,令牌就相当于密码,比如我们在拷贝一个需要密码的repository使用输入你的用户名和token就可以正常操作了。
$ git clone https://github.com/username/repo.git
Username: your_username
Password: your_token
但是如果每次都需要输入密码就太麻烦了。下面讲解一下怎么在git中缓存令牌。事实上令牌跟密码是等价的,在git中缓存密码的方式同样适用于缓存令牌。
缓存令牌
通过设置credential.helper的缓存方式,可以对密码进行缓存。
通常来说有两种方式,一种是cache,一种是store。
cache是将密码放在内存中一段时间,密码不会存放在磁盘中,过一段时间会自动从内存中清除。
通过使用下面的命令,可以开启cache:
git config --global credential.helper cache
对于store来说,它接收一个文件的路径,用来存储密码文件。默认存放的路径是~/.git-credentials,可以通过指定--file来修改:
git config --global credential.helper 'store --file /data/git/.git-credentials'
如果你使用的mac系统,mac提供了一个osxkeychain的东西,可以将密码存储到你的系统用户的钥匙串中。这种方式更加优雅,首先密码是加密保存的,另外其管理起来也非常方便,还有可视化的界面。
当然你也可以从命令行将github的存储密码进行删除:
$ git credential-osxkeychain erase
host=github.com
protocol=https
> [Press Return]
如果你在windows机子上,那么可以安装一个叫做““Git Credential Manager for Windows”的工具,它是一个和osxkeychain类似的东西。
使用GCM
上面介绍的存储方法都已经过时了,现在github推荐使用Git Credential Manager Core (GCM Core) 来对你的客户端凭证进行管理。
通过使用GCM Core,根本不需要创建和储存PAT,全部都有GCM Core来代表你进行管理。
怎么安装GCM呢?下面是在mac上安装的过程:
首先安装git:
brew install git
然后安装GCM Core:
$ brew tap microsoft/git
$ brew install --cask git-credential-manager-core
在下次你clone需要使用身份验证的HTTPS URL时,Git将会提示你使用浏览器窗口登录,通过授权OAuth应用程序,实现GCM Core对凭证的管理功能。
成功通过身份验证后,你的凭据将存储在macOS钥匙串中,并且每次克隆HTTPS URL时都会使用钥匙串中的凭证。 Git不会要求你再次在命令行中键入凭据,除非你更改凭据。
GCM Core同样可以在windows和linux环境下使用。
总结
通过生成新的token,并更换现有的缓存密码,最终我的github又可以重新提交了,赞!
本文已收录于 http://www.flydean.com/05-git-personal-access-token/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
使用账号密码来操作github? NO!的更多相关文章
- 【原】mac电脑保存服务器账号/密码登录操作
一.说明 mac电脑自带终端神奇iterm2,日常登录服务器操作一般场景为ssh user@ip,确认后再输入密码操作. 该操作较为麻烦且需通过hostname判断所在主机. 通过ssh生成秘钥方式较 ...
- Github新安全措施:停止Git客户端账号密码登录的解决方案
今年 8 月 13 日之后,如果你还用账户密码来操作 Github 上的仓库,就会收到如下警告: remote: Support for password authentication was rem ...
- git永久保存账号密码,免去git重复输入账号密码操作
这是我刚刚遇到的问题,每次操git操作都要输入用户名和密码,网上百度了下搜到了方法解决了 方法一:(快捷简单) 直接在git bash 中执行命令:git config --global creden ...
- python实战===实现读取txt每一行的操作,账号密码
最近搞到了一批163邮箱的账号和密码,但是里面有部分账号不能用,密码是错的. 以此为背景 人工手动挨个登录检查效率太低! 于是写了下面这个脚本: import linecache import smt ...
- Linux让git记住账号密码
Linux让git记住账号密码 ——IT唐伯虎 摘要: Linux让git记住账号密码. 1.进入根目录,指令:cd / 2.创建记录账号密码的文件,指令:touch .git-credentials ...
- 账号密码管理系统Access版本
哈哈,花了我整整五天时间,账号密码管理系统软件终于成功编写完成了.由于我的各大论坛的账号密码特别多,记性又不好.所以一直以来都想要这么一个软件的,但是以前学习的都是面向过程的编程语言,一直无法实现这个 ...
- APP账号密码传输安全分析
最近在搞公司的安卓APP测试(ThinkDrive 企邮云网盘)测试,安卓app测试时使用代理抓包,发现所此app使用HTTP传输账号密码,且密码只是普通MD5加密,存在安全隐患,无法 ...
- Android数据存储-通过SharedPreferences实现记住密码的操作
在Android中登陆中,为了实现用户的方便,往往需要根据用户的需要进行记住密码的操作,所以,在Android数据存储中SharedPreferences恰恰可以实现这一点 下面,小编将带领大家通过S ...
- Requests库的几种请求 - 通过API操作Github
本文内容来源:https://www.dataquest.io/mission/117/working-with-apis 本文的数据来源:https://en.wikipedia.org/wiki/ ...
随机推荐
- LAMP——实现phpMyadmin、wordpress及Discuz应用部署
一.环境准备 操作系统:Centos8.3.2011 软件:Apache2.4.37.Mysql8.0.21.PHP7.2.24 二.安装过程 1.安装phpmyadmin 1.1.安装软件包并启动服 ...
- 关于easyswoole实现websocket聊天室的步骤解析
在去年,我们公司内部实现了一个聊天室系统,实现了一个即时在线聊天室功能,可以进行群组,私聊,发图片,文字,语音等功能,那么,这个聊天室是怎么实现的呢?后端又是怎么实现的呢? 后端框架 在后端框架上,我 ...
- php错误处理,自动加载,以及栈堆内存和运行模式堆浅解 (转)
Php错误处理 Php错误级别: E_ERROR 致命错误,会终止脚本运行.值为1 E_WARNING 警告错误,给出提示,不会终止运行值为2 E_PARSE 编译时的语法解析错误,解析错误仅仅由分析 ...
- 桌面Linux系统的先驱者慕尼黑现在正在考虑切换回Windows
From: http://arstechnica.com/business/2014/08/linux-on-the-desktop-pioneer-munich-now-considering-a- ...
- git使用---安装,提交,回退,修改,分支,标签等
下面是对git的各种使用及命令的基础使用,来自廖雪峰老师的git教程,这个收录下,作为git的使用总结. github上面地址为:https://github.com/Zhangguoliu/lear ...
- [转载]API网关
1. 使用API网关统一应用入口 API网关的核心设计理念是使用一个轻量级的消息网关作为所有客户端的应用入口,并且在 API 网关层面上实现通用的非功能性需求.如下图所示:所有的服务通过 API 网关 ...
- ICMP、ARP协议介绍和ping命令
交换机工作原理和常用的简单命令 一.ICMP协议 1)ICMP协议的封装 二.ARP协议 1)什么是ARP协议 2)ARP相关命令 三.Ping命令的使 ...
- final修饰符(4)-"宏替换"
对于一个final变量来说,不管它时类变量,实例变量还是局部变量,只要满足三个条件,这个final变量就不再是一个变量,而是一个直接量.final变量的一个重要用途,就是定义"宏变量&quo ...
- ES6 模块export import
在 ES6 前, 实现模块化使用的是 RequireJS 或者 seaJS(分别是基于 AMD 规范的模块化库, 和基于 CMD 规范的模块化库).ES6 引入了模块化,其设计思想是在编译时就能确定模 ...
- 使用vue-preview报错Cannot read property 'open' of undefined
最近在做一个vue项目中时,需要使用vue-preview插件制作缩略图,首先在终端使用npm i vue-preview -S指令安装了vue-preview插件,然后在main.js中,导入并引用 ...