1. 初次配置 SSH
参考:
2.查看SSH公钥
mac下:
$ cd ~/.ssh
$ cat id_rsa.pub
3. 多个 ssh key 的配置方式
1. 查看当前git是否存在全局用户名邮箱
$ git config user.name git config user.email
2. 如果已经设置全局用户名邮箱请先清除
$ git config --global --unset user.name "你的名字"
$ git config --global --unset user.email "你的邮箱"
3. 创建私钥 文件:
ssh-keygen -t rsa -C “yourgithub@email.com” -f [github_id-rsa] # ( github_id-rsa 自定义名称即可 )
提示:Enter passphrase (empty for no passphrase):
意思是设置密码,在git提交代码时需要输入密码,也可以不设置,直接继续就可;
4. 如,同时配置 gitlab,gitee,github 三个code托管平台, 此时你的 ~/.ssh 文件夹下会出现 如下文件列表:
- github_id-rsa
- github_id-rsa.pub
- gitlab_id-rsa
- gitlab_id-rsa.pub
- gitee_id-rsa
- gitee-id_rsa.pub
5. 查看 github_id-rsa.pub 文件 内容:
vim [github_id-rsa]
6. 拷贝 github_id-rsa.pub 文件内容 到 github ssh keys
点击用户头像 --> setting --> SSH and GPG keys --> New SSH key
7. 创建一个 config 来管理 公钥 和 私钥:
$ cd ~/.ssh/
$ touch config
$ vim config
8. 配置config文件
# github
Host github.com
Hostname ssh.github.com
Port 443
User [自定义 user name]
IdentityFile ~/.ssh/github_id-rsa
# gitlab
Host yourgitlab域名.com
Hostname yourgitlab域名.com
User [自定义 user name]
IdentityFile ~/.ssh/gitlab_id-rsa
# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_id_rsa
9. 删除缓存的秘钥(这一步非必须,比如您是刚刚安装git的)
$ ssh-add -D
10. 查看是否配置成功
github 查看成功与否:
Plan 1: 测试域名是否能正常建立连接
$ ssh -T <git@github.com>
提示:
如下,输入yes 即可;
The authenticity of host '[ssh.github.com]:443 ([198.19.0.211]:443)' can't be established. ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])?
Plan 2: 直接 ssh clone 项目
$ git clone git@github.com:[username]/xxx.git
gitlab 查看成功与否:
Plan 1: 测试域名是否能正常建立连接
$ ssh -T <git@gitlab.xxx.com>
Plan 2: 直接 ssh clone 项目
$ git clone git@gitlab:[项目组]/xxx.git
gitee 查看成功与否:
Plan 1: 测试域名是否能正常建立连接
$ ssh -T <git@gitee.com>
Plan 2: 直接 ssh clone 项目
$ git clone git@gitee.com:[username]/test.git
11. github pull/push 去掉密码验证:
$ ssh-add -K # 对应的 .ssh 下的 id_rsa 文件
然后 enter, 输入 密码
之后会出现你的邮箱账号,则为成功!之后再 pull/push 时,就不需要输入密码了!
问题 & 解决
WT-1. 问题1 & 解决:
问题:
a.
kex_exchange_identification: read: Connection reset by peer
b.
The authenticity of host '[ssh.github.com]:443 ([192.30.253.122]:443)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[ssh.github.com]:443,[192.30.253.122]:443' (RSA) to the list of known hosts.
git@ssh.github.com: Permission denied (publickey).
原因:
没有添加代理
解决:
将你的对应 ssh_id-rsa 文件添加进去
$ ssh-add ~/.ssh/gitlab_id-rsa
再检查一次:
# gitlab检查
$ ssh -T git@gitlab.XXX.com
WT-2. 问题2 & 解决:
问题:
Could not open a connection to your authentication agent.
原因:
没能够和权限代理创建连接
解决:
建立连接:
$ eval $(ssh-agent)
再检查一次:
# gitlab检查
$ ssh -T git@gitlab.XXX.com
WT-3. 问题3 & 解决:
问题:
出现访问 id_rsa 权限 0644 问题,也就是 Permissions 0644 for '/c/Users/xxx/.ssh/id_rsa' are too open 问题。
原因:
看日志报出的错误,"It is required that your private key files are NOT accessible by others",翻译就是需要私钥文件不能被其他人所访问。私钥是访问linux服务器的凭证,
如果被别人获取到,就可能对服务器安全造成影响,这可能也就是这个问题的初衷吧。
解决:
按照错误提示,该文件不能被其他人访问,只要将所属组和其他人的read权限取消即可
执行:
$ chmod 0600 ~/.ssh/github_id-rsa
再检查一次:
# gitlab检查
$ ssh -T <git@gitlab.XXX.com>
示例:我的配置
要配置的信息:
gitlab:
user.name = [我的 gitlab user.name]
user.email = [我的 gitlab user.email]
github:
user.name = [我的 github user.name]
user.email = [我的 github user.email]
gitee:
user.name = [我的 gitee user.name]
user.email = [我的 gitee user.email]
运行脚本:
cd ~/.ssh
ssh-keygen -t rsa -C “我的github邮箱” -f id-rsa-github
ssh-keygen -t rsa -C “我的gitee邮箱” -f id-rsa-gitee
ssh-keygen -t rsa -C “我的gitlab邮箱” -f id-rsa-gitlab
touch config
此时文件列表:
- config
- id-rsa-gitee
- id-rsa-gitee.pub
- id-rsa-github
- id-rsa-github.pub
- id-rsa-gitlab
- id-rsa-gitlab.pub
配置config文件内容:
# github
Host github.com
Hostname ssh.github.com
Port 443
User [github username]
IdentityFile ~/.ssh/github_id-rsa
# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_id-rsa
# gitlab
Host @chanjet.com
Hostname jichengy@chanjet.com
User [gitlab username]
IdentityFile ~/.ssh/gitlab_id-rsa
测试:
# test gitlab
ssh -T git@gitlab.rd.chanjet.com
# test github
ssh -T git@github.com
# test gitee
ssh -T git@gitee.com