SSH 的原理和实践
最近自己在学习使用SSH,现将自己理解的SSH原理和实践SSH的操作写成一篇博客,以供日后查看。
一、SSH是什么?为什么会出现SSH?
SSH英文全称是Secure Shell,即安全外壳。首先SSH是一个网络协议,用来在远程登录等远程操作管理中进行安全的数据传输的协议。我们早期使用的远程管理协议,包括ftp、telnet等都是使用明文在网络上传输数据,这样是很危险的,使用一些抓包工具就能截获这些数据。同时还可能会受到“中间人”攻击,中间人可以模仿服务器,接受客户端发来的数据,经过“中间人”的处理后再模拟客户端将数据发给真正的服务器。所有为了解决这个安全问题,提出了SSH协议,SSH协议本质上就是发送加密后的数据,提高安全性。SSH需要解决明文数据不安全和中间人攻击的问题。
SSH是一个协议,有很多实现,由于SSH不开源,我们一般使用OpenSSH。SSH也有几个版本,一般是SSH1和SSH2。
二、SSH的原理和具体过程
为了理解SSH,我们先要了解加密。加密一般分为对称加密和非对称加密。顾名思义,对称加密是指加密和解密所使用的方法是一样的;非对称加密中加密和解密的方法不一致。在非对称加密中,存在两组密钥,一个是公钥,一个是私钥。公钥用于加密,私钥用于解密。一般来说公钥是对外公布的,只有拥有私钥的用户才能获取真正的数据。
下面根据一个具体的SSH连接分析SSH的原理。
一般地,SSH用于客户端远程登录到远程主机。常见的SSH过程是服务端生成一对公钥和私钥,当客户端请求服务端时,服务端返回公钥给客户端,客户端之后使用公钥加密数据,然后传送给服务端,服务端使用自己的私钥解密数据,从而得到真正的数据,这样就算中间数据被截获,别人也不能破解数据。但是这个过程存在一个问题,如何保证客户端得到的公钥是真的服务端发送过来的?有可能是中间人发送的伪装的公钥,这样就会导致,中间人能够截获到用他的公钥加密的数据,从而能够破解。用于SSH的公钥和密钥都是由自己生成,并没有一个CA验证,只能通过客户端自己确认。为了解决这个问题,提出了两种解决方案:
1. 基于口令的验证
第一次使用SSH连接远程主机时,会提示你如下信息:

可以看到远程主机给我们提供了fingerprint,即服务端的公钥指纹,一般是生成公钥的MD5码,可能会放在某个网站上进行公示,表明这个某某主机的fingerprint,从而客户端据此确定连接的是不是目标远程主机,如果是则输入yes,然后在输入密码,之后这个远程主机就会加入到客户端的 .ssh/known_host 文件中。下次连接时,客户端就会跳过验证host阶段,只要要你输入密码,即可连接到远程主机上。
2. 基于公钥的验证
基于公钥的验证是指客户端将客户端的公钥文件发送到服务端的 .ssh/authorized_keys 文件中。之后客户端请求服务端,客户端会发送一个随机字符给服务端,服务端使用authorized_keys 即 客户端的公钥加密后,发送给客户端,客户端使用自己的私钥解密,再比较之前发送的字符串和解密后的字符串是否一致,如果一致,代表与之连接的服务端是真的服务端。之后连接就不需要输入密码,就可以和服务端建立连接了。

三、SSH实践
实现免密登录,即使用公钥验证。
首先服务端已经安装了ssh服务或者使用github等其他的现成服务。
1. 首先在客户端生成密钥,包含公钥和私钥
ssh-keygen –r rsa
-r 后面制定的是加密方式,我们使用的是rsa。执行完后会生成两个文件:.id_rsa 和 .id_rsa.pub
2. 将客户端的公钥 .id_rsa.pub 添加到服务端的 .ssh/authorized_keys 文件中
3. 之后重启服务端的ssh服务,既可以使用免密登录服务端或其他使用ssh的服务
ssh xxx@0.0.0.0
SSH 的原理和实践的更多相关文章
- 【Todo】ssh的原理和实践
有空的时候补充,可以参考 http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html http://www.ruanyifeng.com/ ...
- 2018-2019-2 20165225『网络对抗技术』Exp2:后门原理与实践
2018-2019-2 20165225『网络对抗技术』Exp2:后门原理与实践 一.实验说明 任务一:使用netcat获取主机操作Shell,cron启动 (0.5分) 任务二:使用socat获取主 ...
- 2018-2019-2 20165312《网络攻防技术》Exp2 后门原理与实践
2018-2019-2 20165312<网络攻防技术>Exp2 后门原理与实践 课上知识点梳理总结 1.后门的概述 后门是指不经过正常认证流程而访问系统的通道 两个关键词:未认证.隐通道 ...
- 2018-2019-2 网络对抗技术 20165318 Exp2 后门原理与实践
2018-2019-2 网络对抗技术 20165318 Exp2 后门原理与实践 后门的基本概念及基础问题回答 常用后门工具 netcat Win获得Linux Shell Linux获得Win Sh ...
- Atitit 管理原理与实践attilax总结
Atitit 管理原理与实践attilax总结 1. 管理学分类1 2. 我要学的管理学科2 3. 管理学原理2 4. 管理心理学2 5. 现代管理理论与方法2 6. <领导科学与艺术4 7. ...
- Atitit.ide技术原理与实践attilax总结
Atitit.ide技术原理与实践attilax总结 1.1. 语法着色1 1.2. 智能提示1 1.3. 类成员outline..func list1 1.4. 类型推导(type inferenc ...
- Atitit.异步编程技术原理与实践attilax总结
Atitit.异步编程技术原理与实践attilax总结 1. 俩种实现模式 类库方式,以及语言方式,java futuretask ,c# await1 2. 事件(中断)机制1 3. Await 模 ...
- Atitit.软件兼容性原理与实践 v5 qa2.docx
Atitit.软件兼容性原理与实践 v5 qa2.docx 1. Keyword2 2. 提升兼容性的原则2 2.1. What 与how 分离2 2.2. 老人老办法,新人新办法,只新增,少修改 ...
- Atitit 表达式原理 语法分析 原理与实践 解析java的dsl 递归下降是现阶段主流的语法分析方法
Atitit 表达式原理 语法分析 原理与实践 解析java的dsl 递归下降是现阶段主流的语法分析方法 于是我们可以把上面的语法改写成如下形式:1 合并前缀1 语法分析有自上而下和自下而上两种分析 ...
随机推荐
- python基础循环语句练习
1.使用while循环输入 1 2 3 4 5 6 8 9 10 n = 1 while n < 11: if n == 7: pass else: print(n) n = n + 1 ...
- Springboot(java)程序部署到k8s
新建rc(replication controller) 以下操作在master1做 rc是一套程序部署的配置,k8s会根据配置自动运行和管理程序,例如自动启动程序,程序挂了自动重启等等 rc配置一般 ...
- 灵活的理解JavaScript中的this指向(一)
this是JavaScript中的关键字之一,在编写程序的时候经常会用到,正确的理解和使用关键字this尤为重要.首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确 ...
- Add JWT Bearer Authorization to Swagger and ASP.NET Core
Add JWT Bearer Authorization to Swagger and ASP.NET Core If you have an ASP.NET Core web applica ...
- jquery 使用a标签导航栏跳转页面,动态添加高亮
众所周知,使用a标签跳转之后,会刷新一次,继而这个添加的样式就会消失.那么怎么解决这一问题呢? <script> $(function () { $('.bar a').each(func ...
- .NET Reactor使用教程(加密源代码示例)
更多:https://www.cnblogs.com/PiaoMiaoGongZi/category/1120300.html 1.打开 Eziriz .NET Reactor,主界面如图1所示: 图 ...
- PREPARE - 创建一个准备好的查询
SYNOPSIS PREPARE plan_name [ (datatype [, ...] ) ] AS statement DESCRIPTION 描述 PREPARE 创建一个已准备好的查询. ...
- kafka参数设置
一.broker参数 broker.id:kafka集群的唯一标识. log.dirs:kafka存储消息日志的目录,多个用逗号隔开,需要保证指定的目录有充足的磁盘空间. zookeeper.conn ...
- phpStorm 配置PHP_CodeSniffer自动检查代码
环境 ubuntu18.4 phpstorm php7.2 最正确安装方法 sudo apt-get install php-codesniffer 一.composer安装PHP_CodeSniff ...
- Windows电脑无法识别USB设备怎么办?
您可能已经注意到,如果您使用USB设备并将其插入计算机,Windows会识别并配置它.然后,如果你拔掉它并将其重新插入另一个USB端口,Windows就会出现一连串的健忘症,并认为这是一个完全不同的设 ...