多密钥ssh-key生成与管理

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

密钥的原理

SSH之因此可以保证安全,缘由在于它采用了公钥加密。git

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

  1. 用户向远程主机发登陆请求:ssh user@远程主机
  2. 远程主机收到用户的登陆请求,把本身的公钥发给用户。
  3. 用户使用这个公钥,将登陆密码加密后,发送回远程主机。
  4. 远程主机用本身的私钥,解密登陆密码,若是密码正确,就赞成用户登陆。

在linux上,若是你是第一次登陆对方主机,系统会出现下面的提示:算法

$ ssh user@hostshell

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)?ssh

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

所谓"公钥指纹",是指公钥长度较长(这里采用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,选好文件后按回车,会提示你输入旧密码,输入好后会提示输入新密码,则修改完成。

相关文章
相关标签/搜索