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,选好文件后按回车,会提示你输入旧密码,输入好后会提示输入新密码,则修改完成。

  • 相关阅读:
    FileWriter写数据路径问题及关闭和刷新方法的区别
    FileWriter剖析
    2018-10-27 22:44:33 c language
    2018-10-23 23:29:54 clanguage
    Just write about
    2018-10-19 00:13:35 ArrayList
    2018-10-18 22:15:32 c language
    Why do collection classes appear
    2018-10-17 22:20:39 c language
    2018-10-16 22:56:13 c language
  • 原文地址:https://www.cnblogs.com/sunlightsgy/p/6679473.html
Copyright © 2011-2022 走看看