git免密clone、fetch、push等远程仓库之ssh篇
业务需求:一般线上私有的gitlab、Gitee,GitHub等仓库都是需要验证登录权限的。本地开发环境拉取和推送分支时每次都需要输入账号密码就会显得不太智能
使用git的通讯协议ssh
先生成免密的ssh key(已有就不用生成),一直回车就行

详细查考Linux 几个常用命令使用解析
git -c命令解析
git -c配置项可以临时覆盖配置,使用格式为git -c <name>=<value>
例如:
- 临时设置作者名称,非修改全局或仓库级别的 user.name 配置
git -c user.name='temp_user' commit -m "fix a bug than xxxxx"
- 临时设置email
git -c user.email='other@mial.com' commit -m "fix a bug than xxxxx"
git 环境变量 core.sshCommand
使用此环境变量可以改变一些默认行为,例如更改ssh验证密钥的配置登
- 全新项目
git clone -c "core.sshCommand=ssh -i ~/.ssh/id_rsa_no_pass -F /dev/null" git@gitlab.com:test/test.git
cd test/
git pull
git push
- 已存在的项目
# 更改配置
git config --local core.sshCommand "ssh -i ~/.ssh/id_rsa_no_pass -F /dev/null"
git pull
git push
究极大招,配置 ~/.ssh/config
文件
上面的方法还是比较啰嗦,直接配置~/.ssh/config
可以进行统一管理
vim ~/.ssh/config
- 模板
Host
Port
# 自定义的端口
User
# 自定义的用户名
HostName
# 真正连接的服务器地址
PreferredAuthentications
# 指定优先使用哪种方式验证,支持密码和秘钥验证方式
IdentityFile
# 指定本次连接使用的密钥文件
- demo
Host gitlab.com
Port 22
User git
HostName git.gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_no_pass
Host 可以使用任意的字段或者通配符,匹配上之后就会,HostName作为真正的服务区地址,且对应的自定义配置项会覆盖
/etc/ssh/ssh_config
配置
至此就真解放双手了