GitLab配置ssh key

  • Git可以通过https方式和ssh方式连接服务器上的仓库
  • 两者比较:
    1、https: 比较方便,但是每次fetch和push代码都需要输入账号和密码,略显麻烦
    2、ssh: 传输前压缩数据,传输效率高,不需要每次提供账号密码

一、Git的user name和email设置

1
2
git config --global user.name "xxx"
git config --global user.email "[email protected]"

二、生成密钥

  • 检查SSH key是否已经存在
1
ls ~/.ssh/id_rsa.pub

输出:No such file or directory。代表不存在

1、使用你注册github的邮箱生成秘钥
1
ssh-keygen -t rsa -C "[email protected]" 然后一路回车(-C 参数是你的邮箱地址)

.ssh目录会生成id_rsa和id_rsa.pub两个文件:id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥

2.然后会出现:Enter file in which to save the key (/Users/miniso_lj/.ssh/id_rsa):
1
回车键
3.如果你的.ssh/id_rsa已经存在,则会出现:/Users/miniso_lj/.ssh/id_rsa already exists.

Overwrite (y/n)? y

1
2
输入:y  (重新覆盖)
输入:n  (不覆盖)
4.设置密码(位数不要太短,尽量设置6位)


详细如下图

image.png

三、添加SSH key到github账户

两种方式:

  • 1、直接找到文件打开,然后复制


    image.png

    打开id_rsa.pub文件,然后复制里面的公钥,复制到GitLab的ssh key中去,添加key就好了。

  • 2、以下是通过命令方式查找公钥:

1
2
3
cd ~/.ssh
ls(查看目录是否有id_rsa.pub文件)
查看公钥:cat id_rsa.pub


详细如下图:

image.png

获取到的那一大段,就是我们需要的ssh key,复制下来,包括前面和后面的,给到下图配置,即可完成GitLab配置ssh key


image.png

四、把ssh 添加到keychain中

如果去git clone代码,会让你输入密码,如果一个还好说,如果关联了很多的话,那就比较麻烦了,这个时候的解决方法就是添加到keychain中:

1
2
//文件路径:/Users/miniso_lj/.ssh/id_rsa
ssh-add -K /Users/miniso_lj/.ssh/id_rsa

注:.ssl 文件是隐藏的
可以用如下的方式显示:
开启显示隐藏文件:
defaults write com.apple.finder AppleShowAllFiles -bool TRUE
关闭显示隐藏文件:
defaults write com.apple.finder AppleShowAllFiles -bool FALSE

五、测试SSH key是否设置成功

输出:
The authenticity of host 'github.com (172.16.0.11)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl9E1IGOCspRomTxdCARLviKw6E6SY6.
Are you sure you want to continue connecting (yes/no)? yes

是否继续连接?输入 yes
输出如下,则表示通过
Hi xxxx! You've successfully authenticated, but GitHub does not provide shell access.

六、设置项目连接方式

  • 这里修改的是项目中 .git (隐藏)文件夹下的config文件
1
git remote set-url [email protected]:Demo/Demo-Base

修改前:

1
2
3
[remote "origin"]
    url = https://github.com/Demo/Demo-Base
    fetch = +refs/heads/*:refs/remotes/origin/*

修改后:

1
2
3
[remote "origin"]
    url = [email protected]:Demo/Demo-Base
    fetch = +refs/heads/*:refs/remotes/origin/*