git 免登陆设置

2020-07-16 develop

使用 git 时,可以通过 http 或者 ssh 访问远端仓库,但是每次访问如果都要填写用户名密码就会很麻烦,这里主要针对这两种场景,介绍如何配置免密码直接登陆。

http

v1.7.9 later

git-v1.7.9 之后的版本,对于 HTTP(S) 链接方式,可以通过 Credential Helpers 实现免登陆,可以通过如下方式配置。

----- 直接缓存在内存中
$ git config --global credential.helper cache

----- 默认过期时间为15min,可以通过如下方式设置为1hour
$ git config --global credential.helper "cache --timeout=3600"

除了 cache 之外,还可以用各个平台上的 keyring 工具,例如 MacOS (osxkeychain)、Windows (wincred)、Linux (gnome-keyring) 等。

v1.7.9 before

对于 v1.7.9 之前版本,可以设置配置文件中的 origin URL,将其配置为如下内容。

https://you:password@github.com/you/example.git

当然,也可以通过如下命令进行配置。

$ git config remote.origin.url https://you:password@github.com/you/example.git

不过这种方式的 密码是明文保存的,其安全性显而易见。

netrc

这个是通用的方式,不过也是明文保存密码。

$ chmod 600 ~/.netrc
$ cat ~/.netrc
machine <hostname> login <username> password <password>

对于 Windows 则文件要命名为 _netrc,同时设置好 %HOME% 环境变量。

SSH

首先设置全局的用户名和邮箱配置。

$ git config --global user.name "foobar hello"
$ git config --global user.email "foobar@kidding.com"

注意: 一定要保护好私钥文件

$ ssh-keygen -t rsa -N "" -f ~/.ssh/git_id -C "foobar@example.com"
$ ssh-keygen -t rsa -N "" -f ~/.ssh/git_id -C "jinyang.sia@gmail.com"
$ cat << EOF >> ~/.ssh/config
# 添加的是git@之后的域名
Host gitlab.com
    User foobar
    Identityfile ~/.ssh/git_id
EOF

然后在平台上添加公钥,如 gitlab 在个人 Profile 中,也就是 Profile Setting=>SSH Kyes,添加上述生成的公钥,通过如下方式测试。

$ ssh -T git@gitlab.com
Welcome to GitLab, foobar hello!

如果使用非标准 22 端口,那么需要通过 -p PORT 参数指定,而非使用 your.host.com:PORT 这种方式。注意,此时,配置文件中同样也需要通过 Port PORT 参数指定。

参考