使用 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
参数指定。