zoukankan      html  css  js  c++  java
  • 多密钥ssh-key生成与管理

    由于 git 大文件用 http 方式难以传输,必须使用 ssh-key,而 ssh-key 又生成了好多个。最近在各种折腾 ssh,公钥私钥上花费了很多时间,现将一些问题总结如下。系统为 Mac/Linux。

    密钥的原理

    SSH之所以能够保证安全,原因在于它采用了公钥加密。

    整个ssh密码登录过程是这样的:

    1. 用户向远程主机发登录请求:ssh user@远程主机
    2. 远程主机收到用户的登录请求,把自己的公钥发给用户。
    3. 用户使用这个公钥,将登录密码加密后,发送回远程主机。
    4. 远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

    在linux上,如果你是第一次登录对方主机,系统会出现下面的提示:

    $ ssh user@host

    The authenticity of host 'host (12.18.429.21)' can't be established.

    RSA key fingerprint is 98:2e:d7:e0:de9f:ac:67:28:c2:42:2d:37:16:58:4d.

    Are you sure you want to continue connecting (yes/no)?

    这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?

    所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。

    很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。

    假定经过风险衡量以后,用户决定接受这个远程主机的公钥。

    Are you sure you want to continue connecting (yes/no)? yes

    系统会出现一句提示,表示host主机已经得到认可。

    Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.

    然后,会要求输入密码。

    Password: (enter password)

    如果密码正确,就可以登录了。

    原文:http://itindex.net/detail/48724-ssh-认证-原理

    密钥的生成和管理

    密钥的生成

    在命令行中,键入

    ssh-keygen -t rsa -C "$your_email"
    

    会生成一对密钥,默认的情况下,私钥将放在~/.ssh/id_rsa,对应的公钥则为~/.ssh/id_rsa.pub

    在生成的过程中,会询问你放密钥的位置。由于每个人可能不止需要一个密钥,所以可以另存为其他名字的密钥,比如path/to/your/dir/id_rsa_new,此时它也将生成对应的公钥。

    使用以下代码来查看生成的公钥

    cat ~/.ssh/id_rsa.pub
    

    将公钥复制到你需要的服务器上(比如 github,gitlab 等等)

    密钥的管理

    如前文所说,如果我们需要多个密钥,那么在使用中,如何确定实际使用哪一个呢?

    目前为止,ssh-key 用得最多的两个 地方,一是 git 相关服务,二是远程连接服务器。

    命令输入

    -i指定私钥,-p指定端口,连接服务器

    ssh -i path/to/your/key developer@192.168.1.237 -p 23
    scp -i path/to/your/key filename developer@192.168.1.237:/diskpath
    

    配置 ~/.ssh/config 文件

    由于 git 命令不能指定私钥,所以要通过 ~/.ssh/config 文件来控制。如果没有就在~/.ssh目录创建config文件,该文件用于配置私钥对应的服务器。比如:

    Host github
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa
     
    Host tsinghua
    HostName tsinghua.edu.cn
    User git
    IdentityFile ~/.ssh/id_rsa_new
    

    这样,链接到 github.com 时,使用的就是 id_rsa;链接到 tsinghua.edu.cn 时,使用 id_rsa_new。另外,Host 的名字可以随便设置,并且在 ssh 后面相当于 User@HostName,比如 ssh github 等价于 ssh git@github.com

    私钥密码修改

    如果工作中,你使用了一个没有密码的私钥,有一天服务器被黑了,你是跳到黄河都洗不清。而生成密钥时,往往会选择一个比较简单的密码。为了安全起见,还是应该修改一下:利用ssh-keygen -p,系统会提示选择需要修改的私钥,默认是~/.ssh/id_rsa,选好文件后按回车,会提示你输入旧密码,输入好后会提示输入新密码,则修改完成。

  • 相关阅读:
    Hadoop集群(三) Hbase搭建
    Hadoop集群(二) HDFS搭建
    Hadoop集群(一) Zookeeper搭建
    Redis Cluster 添加/删除 完整折腾步骤
    Redis Cluster在线迁移
    Hadoop分布式HA的安装部署
    Describe the difference between repeater, bridge and router.
    what is the “handover” and "soft handover" in mobile communication system?
    The main roles of LTE eNodeB.
    The architecture of LTE network.
  • 原文地址:https://www.cnblogs.com/sunlightsgy/p/6679473.html
Copyright © 2011-2022 走看看