Loading...
墨滴

尖叫

2021/08/19  阅读:32  主题:雁栖湖

有序管理SSH Keys,爆击Permission denied

一、背景 【Github】、【58 iGit】、【gitlab.renrenche】同时都要操作,而~/.ssh 中一份 id_rsa & id_rsa.pub怎么够?如果搞了多份,怎么配置和管理比较合理?

对于Git仓库来说,不管你有几台电脑,几个人用,它只关注仓库接口层。

它对外暴露两套交互方式Http 与 SSH,如果使用Http,就每次带user@pwd过来。如果使用SSH,则把SSH keys的公钥 配置到后台(可以有多对密钥),仓库每次校验SSH密钥对。

咱们只聊天SSH的方式,对于Git仓库来说,它可以支持多对密钥,这里咱们就可以使用不同的密钥来区分 不同的电脑 或 工作环境,如果有临时的环境,完事可以在后台直接删除临时Key。

对于个人电脑来说,也可以不管有多少个目标ssh仓库,它只需要管理生成几套密钥对,把密钥与环境的对应关系搞清楚就可以。

接下来,我们看怎么生成密钥对...

二、生成密钥对 生成密钥对,可以在github or gitlab 网站上直接生成,

也可以在电脑上使用ssh命令生成,原理就是一样的,通过计算得出一对非对称密钥对,就是公钥和私钥。(如果非对称密钥对,这方面你不太了解请自行百度一下)

mac电脑操作:

1、先切到~/.ssh/目录下。(~ = 用户目录)

2、执行命令 github:ssh-keygen -t rsa -C "你的邮箱" 这里解释一下,这个邮箱 是对应你的目标仓库的,比如我的三个仓库,对应要执行三次命令,生成三个密钥对。 [github]ssh-keygen -t rsa -C "xxx@live.cn"

[rrc_gitlab]ssh-keygen -t rsa -C "xxx@renrenche.com"

[58_gitlab]ssh-keygen -t rsa -C "xxx@58.com"

执行完命令,你会看到这个提示:

Generating public/private rsa key pair.

Enter file in which to save the key (/Users/phantom/.ssh/id_rsa): 这是让你输入密钥对的文件名,你需要给它命个名,比较我和github就命名为github...

然后,你会看到输入密钥对的密码(直接按回车,就是空密码),我这边使用的是空密码。

Enter passphrase (empty for no passphrase): Enter same passphrase again: 然后密钥对就生成成功了。

Your identification has been saved in github. Your public key has been saved in github.pub. The key fingerprint is: SHA256:RsUbVssZhFPCPDJ/po1QZiHNjJ2xUpUjNP1EG7mSjQ0 xxx@live.cn The key's randomart image is: +---[RSA 3072]----+ | .@O@oo. | | ++^=E+oo | | oO.+X.. | | ...o * = | | S. * . | | . o . | | | | | | | +----[SHA256]-----+ 提示里告诉你,保存了两个文件,一个是github,一个是github.pub,是的 公钥 和 私钥,文件都在~/.ssh/ 目录下;

这里,你可以操作多次,给你的目标仓库都生成完。

然后下一步:

三、公钥分发 将生成的公钥,配置到不同的平台上。

比如分发github公钥

先cat一下github.pub文件内容:

把这串玩意,copy一下。(注意空格啥的)

到github上,找到ssh key的配置,

其它平台,同理不一一演示了。

下面关键来了!!!

四、Config文件 看一下,你的~/.ssh/目录下,有没有config文件?没有的话创建(touch)一个空文件。

在"config"文件中,配置哪个key对应,哪个git仓库,例子如下: Host GitHub.com # 别名 HostName github.com # 主机地址 IdentityFile ~/.ssh/github # 指定认证文件 User xxx@live.cn # 用户名

Host 58 HostName igit.58corp.com IdentityFile ~/.ssh/58_gitlab User xxx@58.com

Host RenRenChe HostName gitlab.renrenche.com IdentityFile ~/.ssh/rrc_gitlab User xxx@renrenche.com

配置完,可以使用source config 让 config 文件立即生效,而不必注销并重新登录。

五、ssh-agent高速缓存 私钥管理者ssh-agent,ssh认证的过程其实是客户端(ssh命令端)读取自己的私钥并推导出指纹发送给服务端(sshd端),服务端也使用自己保存的公钥推导出指纹进行对比,如果指纹相同说明服务端的公钥和客户端的私钥是配对的。

那么首先,看一下,你的~/.ssh/目录下,有没有known_hosts文件?没有的话创建(touch)一个空文件。

输入: sudo ssh-add github 让新创建的秘钥加入到 ssh-agent高速缓存中。比如我的分别输了三条: sudo ssh-add github sudo ssh-add 58_gitlab sudo ssh-add rrc_gitlab 注:这里可能会提示你输入 “电脑密码” 主要验证这个sudo,意思找系统要一个临时的 牛掰的 操作权限。

追加:这里遇到一个问题,我发现mac os 一重启,这ssh-add进去的密码就都没了。你可以重启后使用ssh-add -l查看,已加入的密钥。

这里的解决方案是,在mac os上,可以使用 ssh-add -K [path/to/private SSH key] 加入你的密钥,这样重启后就不会消失了。

解决方案链接:https://superuser.com/questions/88470/how-to-use-mac-os-x-keychain-with-ssh-keys

然后,你的配置就完全了,当然如果你想删除known_hosts文件中的配置,可以使用命令。

ssh-keygen -R

六、测试目标ssh连接 通过ssh命令,直接测试目标ssh的连接状态

ssh -T git@github.com ssh -T git@igit.58corp.com ssh -T gitlab.renrenche.com

恭喜你,完事了。 (啥?还是不通?莫慌!)

可以直接尝试【git pull】or【git clone】,我命令行测了下58的仓库,发现卡着不动,不知道为啥... 但直接用命令是可以拉下代码的~

(啥?还是不行?) 通过ssh -Tv git@github.com

查看一下ssh过程日志,如果从日志上 分析不出来原因,还删除文件,从第一步再来一遍。

还是不行? 请联系笔者,笔者帮你 撮头发~

其它 为什么不使用http的方式操作git git命令行学习 git图形化工具

尖叫

2021/08/19  阅读:32  主题:雁栖湖

作者介绍

尖叫