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

转载于:https://www.cnblogs.com/sunlightsgy/p/6679473.html

多密钥ssh-key生成与管理相关推荐

  1. Git SSH Key 生成并添加到github/gitee步骤

    Git SSH Key 生成并添加到github/gitee步骤 在本地生成密钥 大家好,这里是坚果前端小课堂,欢迎大家关注我的公众号,"坚果前端" Git是分布式的代码管理工具, ...

  2. Git SSH Key生成,配置到GitHub 并测试

    //本环境为os下 //首先是查看本机安装git版本 yangliu$ git --version git version 2.17.0 //git目录 yangliu$ which git /usr ...

  3. Git 中 SSH key 生成步骤

    由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以必须要让github仓库认证你SSH key,在此之前,必须要生成SSH key. 第1步:创建SSH Key.在windows下 ...

  4. ssh key生成_Stelnet(ssh)登陆华为交换机配置教程

    使用STelnet V1协议存在安全风险,建议使用STelnet V2登录设备. 1.生成本地密钥对 密钥保存在交换机中单不保存在配置文件中 [Huawei]rsa ? key-pair RSA ke ...

  5. git ssh key生成

    重装系统后,需要重新安装git,ssh key便是遇到的其中一个问题,具体解决办法如下: 1.安装好git客户端后,查看本地是否有.ssh文件,命令如下: mkdir ~/.ssh 2.如果没有该文件 ...

  6. Git SSH Key 生成步骤

    Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置. github的SSH配置如下: 一 . 设置Git的user name和email: $ git ...

  7. 【Git】SSH Key 生成

    GIT 是分布式的代码管理工具,远程的代码管理基于 SSH,因此当远程使用GIT 时需要配置 SSH,但是我经常会忘记哈哈

  8. 多个ssh key 和 config 配置

    ssh config 管理多个key 1,多个ssh key 生成 2,ssh -i 选择私钥登陆 3,配置config 1,多个ssh key 生成 $ ssh-keygen -f gcp # -f ...

  9. Mac环境配置SSH Key

    文章目录 1.查看本地是否存在SSH Key 2.生成SSH Key 生成:ssh-keygen -t rsa -C "emAIl@xxx.com" 添加:ssh-add ~/.s ...

  10. Git如何生成多个ssh key添加到ssh-agent管理项目

    Git如何生成多个ssh key添加到ssh-agent管理项目 生成新的ssh密钥 ssh-keygen -t rsa -b 4096 -C "your@example.com" ...

最新文章

  1. 8.2 matlab曲线对象和曲面对象(曲线对象、曲面对象、光照处理、图形对象的反射特性)
  2. Git 常用命令总结,掌握这些,轻松驾驭版本管理
  3. ZooKeeper Java示例
  4. kindeditor 限制上传图片大小及宽高
  5. 62. 不同路径(JavaScript)
  6. 计算机网络cr什么意思,网络用语cr是什么意思
  7. [CTO札记]社区领域模型-SRC抽象模型
  8. 交通灯keil程序加2位数码管_十字路口交通灯控制Keil编写
  9. 自己做量化交易软件(28)小白量化实战2--变红买入变绿卖出
  10. 搜狗浏览器收藏夹误删恢复
  11. pe制作linux硬盘的镜像文件_用WindowsPE制作的启动U盘或移动硬盘安装cent os 6.2
  12. emeditor的快捷键
  13. 网站PC端与wap端适配
  14. 盛世昊通董车长2.0,拼车车运营模式解读
  15. python笔记05: 程序结构
  16. 定位猫显示连接服务器失败,定位猫为什么不能用了,该怎么解决?看这里解决。...
  17. 激光切割机的原理是什么?(激光切割机的结构是什么样的)
  18. 假期自学编程没有学习路线?
  19. 关于retina视网膜显示的知识总结
  20. PTA 补充题库 7-19 评委打分

热门文章

  1. linux重启memcache_linux下启动和停止memcached
  2. 黑洞效果的粒子背景效果
  3. 大神教你Nginx常用基础配置方案
  4. 分布问题(二元,多元变量分布,Beta,Dir)
  5. 领酌酒业:一文阅尽酱香酒
  6. 'Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set.
  7. maven项目乱码以及项目名出现红叉
  8. 分布式搜索elasticsearch 索引文档的增删改查 入门
  9. zookeeper之系列五:简单操作
  10. Hibernate POJO在序列化(JSON)时遇到的若干问题