git 之 SSH 与 HTTP[S] 免密登录(取消每次输入账号密码过程)配置
前言
一直很困惑 SSH 和 HTTPS 之间的关系。
两者都对传输信息的过程进行了加密、解密操作,都使用到了非对称加密(RSA),点我查看 DES、AES、RSA 的区别。
但不同的地方更多,SSH(Secure Shell) 是为远程登录,远程通信等设计的安全通信协议;而 HTTPS 采用的是 SSL(Secure Sockets Layer 安全套接层)协议或者其继任者TLS(Transport Layer Security传输层安全)协议。两者完全不同,详情点击我查看 - SSH原理。
使用过 git 的童鞋应该都知道,连接使用 git 服务器有两种方式,一种是 SSH,另外一种就是 HTTP[S]。相对操作来说,HTTP[S] 方式使用更简明一些,输入账号密码,上传或下载代码。而 SSH 方式需要本地生成 RSA 的公钥、私钥,并将公钥上传到 git 服务器,之后本地与服务器连接就可以省去账号密码验证。使用过程中发现,HTTP[S] 方式每次 push 代码到服务器 或者 merge 代码到本地库都需要输入账号、密码,这对于开发项目来说很麻烦。
那么有没有一种方法是可以跳过输入密码这个过程的呢?
免密登录配置
SSH 方式
如前面所说,在配置完成 SSH 后,本地与 git 服务器通信是不需要输入账号、密码的。
具体配置 SSH 操作如下(本地 shell 使用 git-bash):
1.快速确认是否已经拥有密钥
$
为 git-bash shell 环境自带的 bash 前缀,不属于指令的一部分。
$ ls ~/.ssh/
id_rsa id_rsa.pub known_hosts
如果已存在 id_rsa 和 id_rsa.pub (默认名称)文件,则说明你之前已经配置生成过密钥了。
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAA...
...
...+Rth jasonli@seasidecrab.com
使用 cat
或 less
查看 .pub
结尾的公钥文件,看末尾的邮箱地址是否是你自己的。
如果不是你的邮箱,说明不是你自己生成的,你就需要重新生成密钥了。
2.生成密钥文件
如果是本地生成过密钥文件,可以跳过这一步。
ssh-keygen -t rsa -C "your_email@example.com"
# 代码参数含义:
# -t指定密钥类型,默认是rsa,可以省略。
# -C设置注释文字,比如邮箱。
# -f指定密钥文件存储文件名。
首先 ssh-keygen 会确认密钥的存储位置和文件名(默认是 .ssh/id_rsa),然后他会要求你输入两次密钥口令,留空即可。所以一般选用默认,全部回车即可。
3.上传公钥文件内容
接下来我们登陆到 git 服务器上传公钥文件了。
以 Github 为例,右上角小头像 -> Setting-> SSH and GPG keys 中,点击 new SSH key。
Title 可以随便填写,但最好起的名字能让自己知道这个公钥是哪个设备的。Key 将上面生成的.pub文件中的所有内容(也就是上面的 cat
指令查看公钥文件输出的全部内容)复制到这里。点击下面的 Add SSH key 提交即可。
4.测试使用 git clone
或者 git push
操作代码
以上配置已经完成,接下来就是测试是否可以使用 SSH 免密登录了。
可以使用 git clone
去 fetch git 服务器上的代码,地址选择 SSH 方式的地址。
如果 git 服务器上没有 repo(版本库),可以新创建一个版本库(不勾选自动生成 READEME.md),然后版本库页面上会有指令提示,按照 git init
的那一套指令往下走就可以了。
HTTP[S] 方式
HTTP[S] 方式也是可以实现免密登录的,这需要额外将你的账号密码保存到本地的 git 身份校验文件中。
具体配置 HTTP[S] 免密登录操作如下(本地 shell 使用 git-bash):
1.查看 git 的身份校验文件 .git-credentials
$ cat ~/.git-credentials
...
http://username:password@xx.xx.xx.xx
...
若没有这个文件,使用 touch ~/.git-credentials
新建一个。
具体格式:http[s]://用户名:密码@服务器地址
就是在你正常的 HTTP[S] 方式的 git 服务器地址内拼接上你的用户名和密码(明文存储)。
2.在 git 校验文件中添加拼接后的 HTTP[S] 方式的服务器地址
一条一行即可。
3.添加 git 配置项,使能身份校验
$ git config --global credential.helper store
查看 ~/.gitconfig
文件变化(git 配置项是否修改成功)
[credential]
helper = store
4.测试使用 HTTP[S] 方式的免密登录
过程与 SSH 的步骤 4 基本一致,注意 fetch 和 push 的地址要改成 HTTP[S] 方式的服务器地址。