Git 通过 SSH 或 token 访问 Github
弃用账密验证 GitHub 操作
GitHub防黑客新措施:弃用账密验证Git操作,改用 token 或 SSH 密钥,于 2021-08-13 禁用了账号、密码操作Git,改用了token 或者ssh 方式。GitHub官方表示,这一举措是为了提高Git操作的安全性,防止密码撞库等事情发生。哪些操作会受影响呢?
- 简单来说,如果你还在用账密验证Git操作,这些行为都会受到影响:
-
命令行Git访问
-
采用Git的桌面应用程序(GitHub Desktop不受影响)
-
账密访问GitHub上Git repo的一切应用程序/服务
- 这些用户不会受影响:
-
已经采用token或SSH密钥方式验证,即启用双因素身份验证(2FA)的用户
-
使用GitHub Enterprise Server本地产品的用户(该产品尚未对此进行更改)
-
使用GitHub App的用户,此前已经不支持账密验证
在今年6月30号(15~18时)、7月1号(0~3时)、7月28号(15~18时)和29号(0~3时),GitHub已经针对这件事进行了预演,所有Git操作都被要求用token或SSH密钥验证。
现在,这项举措已经变成一个永久措施。
GitHub究竟为什么要这样做呢?
token 和 SSH 密钥安全在哪里?
首先需要了解,只用账户和密码进行身份验证会有什么隐患。互联网上,每天都有大量网站遭受黑客攻击,导致数据外泄,这些数据中就包括不少用户的账号密码。拿到账号密码后,黑客会用它们试着登录其他网站,也就是所谓的密码撞库。简单来说,如果你A、B、C网站用的是一套账户密码,在A网站的密码被泄露后,B、C网站也可能会被盗号。
为了防止密码撞库,网站会采取更多手段验证身份信息,像GitHub就推出了双因素身份验证、登录警报、设备认证、防用泄露密码及支持WebAuth等措施。双因素身份验证,是指在秘密信息(密码等)、个人物品(身份证等)、生理特征(指纹/虹膜/人脸等)这三种因素中,同时用两种因素进行认证的过程。
现在,GitHub 开始强制用户采用 token 或 SSH 密钥进行身份验证。相比于账密,这两者的安全性显然更高:
-
唯一性:仅限GitHub使用,根据设备/使用次数生成
-
可撤销性:可随时被单独撤销,其他凭证不受影响
-
区域性:使用范围可控,只允许在部分访问活动中执行
-
随机性:不受撞库影响,比账密复杂度更高
那么,token 和 SSH 密钥之间,哪个更合适呢?虽然目前 GitHub 官方推荐的是 token,因为它设置更为简单,不过相比之下,SSH 密钥的安全性要更高一些。
Github 设置 SSH 方式
关于 Github 与 SSH
使用 SSH 协议可以连接远程服务器和服务并向它们验证。 利用 SSH 密钥可以连接 GitHub,而无需在每次访问时都提供用户名和个人访问令牌。设置 SSH 时,您需要生成新的 SSH 密钥并将其添加到 ssh 代理中。 使用密钥进行身份验证之前,您必须将 SSH 密钥添加到 GitHub 上的帐户中。
SSH 与 SSL 的区别
-
SSH 与 SSL 应用方向不同,但基于技术都是一样的(公钥和私钥配对)
-
SSL 主要用在 Browser 和 erver 通信,比如 HTTPS = HTTP + SSL
-
SSH是由客户端和服务端的软件组成的,用于computer之间通信,比如我们通过SSH登录远端服务器。有两个不兼容的版本分别是:1.x和2.x。用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。
Item | SSL | SSH |
---|---|---|
Abbreviation | SecureSocket Layer | SecureShell |
Port | 443 | 22 |
Application | For Encrypting Communication between Brower and Server | For Encryptiong Communication between Two Computer |
Adopted by industry | Widely used by E-commerce,Banking,Social Media,Government,Healthcare,etc.industries. | Widely Adopted by Networking Industry. |
Authentication | Via Public-Kye/Private-Key Pair | via 1) Public-Kye/Private-Key Pair Or 2)User-Id/Password Pair |
创建 SSH key
- SSH 有一套固定命令,其中使用 ssh-keygen 命令创建 ssh-key
1 | $ ssh-keygen -t rsa -C "comment" |
-
生成中会提示输入密码(该密码是你push文件的时候要输入的密码,而不是github管理者的密码)也可以不输入密码,直接按回车,那么push的时候就不需要输入密码,直接提交到github上了。
-
然后经过几个回车后显示会在指定目录下生成密钥对文件,有.pub后缀的文明公钥,没有后缀名的问私钥
添加 SSH Key 到 Github 网站
-
首先你需要拷贝 id_rsa.pub 文件的内容,你可以用编辑器打开文件复制,也可以用git命令复制该文件的内容,如:
$ clip < ~/.ssh/id_rsa.pub
-
在任何页面的右上角,单击您的个人资料照片,然后单击 Settings(设置)
-
登录你的github账号,从又上角的设置( Account Settings )进入,然后点击菜单栏的 SSH key 进入页面添加 SSH key;
-
在用户设置侧边栏中,单击 SSH and GPG keys(SSH 和 GPG 密钥)
- 单击 New SSH key(新 SSH 密钥)或 Add SSH key(添加 SSH 密钥)
-
在 “Title”(标题)字段中,为新密钥添加描述性标签。 例如,如果您使用的是个人 Mac,此密钥名称可能是 “Personal MacBook Air”
-
将密钥粘贴到 “Key”(密钥)字段
- 单击 Add SSH key(添加 SSH 密钥)
- 如有提示,请确认您的 GitHub 密码
测试 SSH 连接
设置 SSH 密钥并将其添加到您的 GitHub 帐户后,您可以测试连接
-
Mac 、Linux 环境下打开 Terminal(终端);Windows环境下打开 Git Bash;
-
测试命令:
1 | $ ssh -T git@github.com |
您可能会看到类似如下的警告:
The authenticity of host ‘github.com (IP ADDRESS)’ can’t be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)?
- 验证所看到消息中的指纹是否匹配 GitHub 的 RSA 公钥指纹。 如果是,则输入 yes:
Hi username! You’ve successfully authenticated, but GitHub does not
provide shell access.
- 验证生成的消息包含您的用户名
Github 设置 token 方式
创建个人访问令牌
- 登录 Github 后,在任何页面右上角,单击您的个人资料照片,然后单击 Settings(设置)
- 在左侧边栏中,单击 Developer settings
- 在左侧边栏中,单击 Personal access tokens(个人访问令牌)
- 单击 Generate new token(生成新令牌)
- 给令牌一个描述性名称
- 选择要授予此令牌的作用域或权限。 要使用令牌从命令行访问仓库,请选择 repo(仓库)
- 单击 Generate token(生成令牌)
- 单击 将令牌复制到剪贴板。 出于安全原因,在离开页面后,您将无法再次看到令牌
警告: 像对待密码一样对待您的令牌,确保其机密性。 使用 API 时,应将令牌用作环境变量,而不是将其硬编码到程序中。
在命令行上使用令牌
如果您有令牌,则可以在通过 HTTPS 执行 Git 操作时输入令牌,而不是密码。
例如,在命令行中输入以下内容:
1 | $ git clone https://github.com/username/repo.git |
个人访问令牌只能用于 HTTPS Git 操作。 如果您的仓库使用 SSH 远程 URL,则需要将远程 URL 从 SSH 切换到 HTTPS。
如果没有提示您输入用户名和密码,说明您的凭据可能已缓存在计算机上。 您可以在密钥链中更新您的凭据,用令牌替换您的旧密码。
您可以使用 Git 客户端缓存 PAT,而不必为每个 HTTPS Git 操作手动输入 PAT。 Git 会将您的凭据临时存储在内存中,直到过期为止。 您还可以将令牌存储在 Git 可以在每个请求之前读取的纯文本文件中。