前言

由于最近频繁需要登录几个服务器,每次登录都需要输入密码,故相对麻烦。

由于个人服务器用于实验,故对安全性要求不是很高,故想实现ssh免密登录。

通过阅读ssh 公钥私钥认证操作及原理以及ssh公钥登陆。成功实现了自己的需求。

下面来说下讲解公钥密钥的工作原理以及ssh免密登录的实现步骤。

公钥密钥原理概述

在课程计算机基础中,我记得是学过公钥密钥的,公钥和密钥是同时生成的。

公钥用于加密,私钥用于解密。

公钥是很多人可以持有,而密钥只能自己持有。

在ssh中,只需公钥放在服务器A上,那么你就可以通过私钥登录服务器A。

当你连接已放置你公钥服务器A时,服务器A和客户端之间大概存在以下认证流程。

(以下认证流程来自博客:ssh 公钥私钥认证操作及原理

为了说明方便,以下将使用这些符号。

Ac 客户端公钥
Bc 客户端密钥
As 服务器公钥
Bs 服务器密钥

认证过程分为两个步骤。在认证之前,客户端需要通过某种方法将公钥 Ac 登录到服务器上。

  1. 会话密钥(session key)生成
    1. 客户端请求连接服务器,服务器将 As 发送给客户端。
    2. 服务器生成会话ID(session id),设为 p,发送给客户端。
    3. 客户端生成会话密钥(session key),设为 q,并计算 r = p xor q。
    4. 客户端将 r 用 As 进行加密,结果发送给服务器。
    5. 服务器用 Bs 进行解密,获得 r。
    6. 服务器进行 r xor p 的运算,获得 q。
    7. 至此服务器和客户端都知道了会话密钥q,以后的传输都将被 q 加密。
  2. 认证
    1. 服务器生成随机数 x,并用 Ac 加密后生成结果 S(x),发送给客户端
    2. 客户端使用 Bc 解密 S(x) 得到 x
    3. 客户端计算 q + x 的 md5 值 n(q+x),q为上一步得到的会话密钥
    4. 服务器计算 q + x 的 md5 值 m(q+x)
    5. 客户端将 n(q+x) 发送给服务器
    6. 服务器比较 m(q+x) 和 n(q+x),两者相同则认证成功

ssh免密登录实验步骤

(实验环境:Ubuntu 17)

1. 若还没安装ssh服务的同学,请先安装。

sudo apt-get install ssh

本文博客地址:http://www.cnblogs.com/toulanboy/

2. 进入家目录下的.ssh文件夹

(若没有该目录,请创建。)

cd ~/.ssh

3. 生成密钥对

(中途会让你输入密钥对的密码,由于我们想免密,故按回车跳过即可。)

(假如设置了,后面通过私钥连接服务器时,则需要输入密钥对的密码。)

ssh-keygen -t rsa

4. 将客户端.ssh目录下的id_rsa.pub复制到服务器A的家目录下

(下面指令的115.115.115.115是服务器IP,lgq是你想登录服务器的用户名)

scp id_rsa.pub lgq@115.115.115.115:~/

5. 在服务器A上,将客户端的id_rsa.pub追加到服务器的ssh的认证列表中

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

6. 客户端后面直接可以通过私钥免密登录了。

ssh lgq@115.115.115.115

至此完毕。希望对你有帮助。

参考:ssh 公钥私钥认证操作及原理以及ssh公钥登陆

最新文章

  1. Bootstrap表单验证插件bootstrapValidator使用方法整理
  2. 如何在 ASP.NET 4.6 与 IIS10 中运用 HTTP/2 ?
  3. Android Studio 2.2新功能预览
  4. 使用Memory Analyzer tool(MAT)分析内存泄漏
  5. word2vec——高效word特征提取
  6. OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数
  7. datatable 的ajax修改参数,post可以传参处理
  8. Emgu CV的一个异常的解决方法
  9. 《使用wxWidgets进行跨平台程序开发》chap09——布局一个对话框
  10. Flesch Reading Ease(模拟)
  11. Linux永久挂载远程网络目录
  12. [Effective Modern C++] Item 3. Understand decltype - 了解decltype
  13. MySQL的备份和恢复
  14. CSS——z-index
  15. 建造者模式(Java与Kotlin版)
  16. linux下tomcat作为daemon进程运行
  17. Android 基本控件相关知识整理
  18. Python IO模型
  19. linq partion by 用法
  20. java自动给版本升级,遇9变0且前面一个版本加1

热门文章

  1. JAVA列出某文件夹下的所有文件
  2. Python-2-序列及通用序列操作
  3. EasyUI Datagrid换页不清出勾选方法
  4. NOIP前模拟赛总结
  5. siege官方文档(译)(一)
  6. Retrofit实现Delete请求
  7. 使用Yeoman 创建 angular应用
  8. Unity Shader入门精要学习笔记 - 第3章 Unity Shader 基础
  9. iis日志存放位置 及 查看方法
  10. CF1061B Views Matter