• 有序管理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 “lingrixin@live.cn”

    [rrc_gitlab]ssh-keygen -t rsa -C “lingrixin@renrenche.com”

    [58_gitlab]ssh-keygen -t rsa -C “lingrixin@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 lingrixin@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 lingrixin@live.cn # 用户名

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

    Host RenRenChe
    HostName gitlab.renrenche.com
    IdentityFile ~/.ssh/rrc_gitlab
    User lingrixin@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过程日志,如果从日志上 分析不出来原因,还删除文件,从第一步再来一遍。

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

  • 相关阅读:
    5.21.1.1 Set Feature Command - Arbitration
    14:00面试,14:06就出来了,问的问题过于变态了。。。
    echarts漏斗图,形状是通过value来保持金字塔形状的,添加新的字段来用真正的数据
    excel功能区(ribbonx)编程笔记--5 菜单
    大数据入门:HDFS API 常规操作
    linux ls文件排序
    上班族想轻松快速拿本科证,建议选小自考!
    【image captioning】CaMEL: Mean Teacher Learning for Image Captioning(实现流程)
    河道水位监测,助力守护河流生态可持续发展
    大衍数列-蓝桥杯?-Lua 中文代码解题第2题
  • 原文地址:https://blog.csdn.net/lingrixin/article/details/127634183