小代同学在使用Git的过程中发现,每次向远程仓库推送代码的时候都需要输入账号密码。做为一个程序员,多多少少都会有偷懒的思维。那么如何才能避免每次都要输入账号密码呢?一番研究之后,小代同学发现了两种实现方式。一种是让Git记住密码,第二种就是使用SSH协议推送。

准备工作

首先我们需要准备一个和小代差不多的环境,这样才能完整的模拟小代同学的操作。第一步我们需要在Github上创建一个仓库,如下图所示。

Git使用小技巧之免密登录-LMLPHP
远程仓库创建完成后,我们需要将其克隆到本地。

git clone https://github.com/ganchaoyang/git-test.git

你会发现每次向远程仓库PUSH代码的时候都会提示输入账号密码,如下所示:

root@server01:~/git-test# git push
Username for 'https://github.com': ganchaoyang
Password for 'https://[email protected]':

这样,我本地就有了一个和小代同学差不多的环境,下面我们就一起来看下小代同学是如何操作的吧。

Git记住密码

首先小代同学尝试的是第一种方式--记住密码。这种方式只需要设置credential.helper = store配置就可以了。那么怎么设置呢?很简单一行命令就可以搞定。

git config --global credential.helper store

执行完这句命令后,我们会发现在用户主目录下的.git/config文件里面会多了一项配置。

[credential]
        helper = store

然后我们发现我只需要在第一次推送的时候输入账号密码,第二次往后都不需要再输入密码了。--global的配置是对该用户全局生效的,如果你只想当前项目生效,在配置的时候只需要去掉--global即可。当然了,如果你不想执行命令,直接Copy上面配置的内容到你的.git/config文件里面也是可以的。

SSH协议方式

小代还发现一种可以实现无需密码就往远程推送代码的方式,那就是配置SSH KEY。那么如何配置呢?
1.首先,我们需要在我们本地的机器上生成一对ssh的公私钥。

root@server01:~/git-test# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:iik07xiElU3zph5Gv3VbwSUEhRX9vpHhz1ZaRegndzw root@server01
The key's randomart image is:
+---[RSA 2048]----+
|    o     .**o.. |
|   + o    .. oo .|
|  o o o     o. + |
| o . +       .oEB|
|. + + . S . . .=*|
| o = + + . o   ++|
|  o = o   .    +=|
|   =          ..+|
|  . .          . |
+----[SHA256]-----+

中间的Enter passphrase是让你输入密钥的访问密码,如果不需要的话直接回车即可。公私钥对默认生成在用户主目录下的.ssh/目录下。

2.第二步我们需要将公钥复制到Github上。在用户设置界面有个SSH and GPG keys,我们点击它并选择新建一个SSH key,然后将公钥复制进去即可。在Github上添加SSH公钥的详细操作步骤可以参考官网的教程

Git使用小技巧之免密登录-LMLPHP
3.这一步我们需要修改本地仓库中的远程仓库的地址,其实我们只需将.git/config文件中远程仓库的地址由http的地址换成ssh的地址即可。(PS:这两种协议的地址都可以在Github上获取。)

# 修改前
[remote "origin"]
    url = https://github.com/ganchaoyang/git-test.git
    fetch = +refs/heads/*:refs/remotes/origin/*

# 修改后
[remote "origin"]
    url = [email protected]:ganchaoyang/git-test.git
    fetch = +refs/heads/*:refs/remotes/origin/*

4.到这一步我们已经完成了SSH的配置,只需要推送一下代码测试一下即可。你会发现真的不需要密码了。

$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 259 bytes | 259.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:ganchaoyang/git-test.git
   e8bcffc..6e1e8a9  master -> master

结束语

今天这篇文章主要介绍了两种推送代码无需输入远程仓库账号密码的方式,分别是让Git记住密码以及配置SSH KEY,希望能够对你有所帮助。

Git使用小技巧之免密登录-LMLPHP
07-17 10:40