一、简介

    SSH全名Secure Socket Shell,安全外壳传输协议。专为远程登录会话和其他网络服务提供安全性的协议

二、加密算法

  要了解SSH的原理,就要先知道目前主流的俩种加密算法

  2.1 对称加密

所谓对称加密,就是A使用123456密钥进行加密,B使用123456密钥进行解密。很容易理解,常用的对称加密算法:   DES,3DES,AES

  如下图所示:

  2.2 非对称加密

所谓非对称加密,就是A通过非对称加密算法产生了两个密钥:一个私钥,一个公钥。你用一个密钥加密的东西,必须用另外一个密钥解密。A通过私钥加密后的密文发送给B,B通过获取A的公钥进行解密。

私钥顾名思义,就是自己私有的密钥,不会传播的,存放在本地
公钥顾名思义,就是能在网络上传播的,也同时容易被截取的。 #以上存在一个单向安全问题:
只靠A产生的密钥对进行加解密,则交互流程是:
A向B发消息:A(A的私钥加密)-->internet--->B(A的公钥解密)
B向A发消息:B(A的公钥加密)-->internet-->A(A的私钥解密)
假如internet上非法这C获取了A的公钥,则C就能解密从A发过来的信息。而B通过公钥加密向A发送的消息,C手上只有公钥,无能无力。所以就存在了单向传输安全问题 #解决办法:
B也产生一对密钥(B的公钥和B的私钥)
可靠的双向传输方式:
A向B发消息:A(B的公钥加密)-->internet--->B(B的私钥解密)
B向A发消息:B(A的公钥加密)-->internet-->A(A的私钥解密)
总结:可靠传输,公钥加密,私钥解密

  可靠的非对称传输方式如图:

三、SSH原理

  SSH基于的是非对称加密

四、SSH两种认证方式

  4.1 用户名和密码认证

#交互流程
1.用户A向远程主机B发送登录请求
2.远程主机B把自己的公钥发送给用户A
3.用户A使用B的公钥,加密用户名和密码,发送给远程主机B验证
4.远程主机B用自己的私钥进行解密登录用户名和密码,如果密码正确,就同意用户登录

  用户名密码认证交互图

  4.2 公钥认证

1.用户A将自己的公钥储存在远程主机B上。
2.用户A向远程主机B发送登录请求
3.远程主机B用A的公钥加密一段随机字符串,发送给A
4.用户A用自己的私钥解密后,再将此字符串和sessionKey通过MD5生成摘要1,再发给远程主机B。
5.远程主机B将本地的随机字符串和session Key通过MD5生成摘要2,比对用户A发送过来的摘要A是否一致,如果一致,就证明用户是可信的,直接允许登录shell,不再要求密码。

  公钥认证交互图:

五、中间人攻击

SSH中间人攻击(Man-in-the-middle attack),只适用于SSH采用的是用户名密码认证的方式

  攻击原理:

1.截获了用户A的登录请求
2.冒充远程主机B,将伪造的公钥发给用户A
3.用户以为是真实的远程主机B,将用户和密码用非法远程主机C发来的公钥加密,发出
4.非法远程主机C用自己的私钥进行解密,从而获得登录真实远程主机的用户名和密码

  中间人攻击交互图:

  解决办法:

方法一:核对远程主机贴出的公钥指纹(见注释1)与自己本机第一次登陆显示的公钥指纹,是否一致。不一致则说明被劫持,禁止输入密码

方法二:采用密钥登陆

#注释1:公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹,如:4a:65:fb:c2:bb:11:19:c3:db:46:37:8a:95:78:34:da

六、SSH免密认证示例

  6.1  SSH免密登陆centos服务器

#在centos7 客户端配置:
1.客户端生成一对密钥对(私钥和公钥)----使用ssh-keygen工具
ssh-keygen #输入此命令,回车
Enter file in which to save the key (/root/.ssh/id_rsa): #直接回车,密钥对默认保存在当前用户/.ssh/下
Enter passphrase (empty for no passphrase): #是否要给密钥对设立密码,用于二次认证,一般皆为不需要,直接回车
Enter same passphrase again: #在此输入密码,不需要,直接回车 2.将客户端产生的公钥发送给远程服务器----使用ssh-copy-id工具
ssh-copy-id root@192.168.1.1
The authenticity of host '192.168.62.37 (192.168.62.37)' can't be established.
ECDSA key fingerprint is 4a:65:fb:c2:bb:11:19:c3:db:46:37:8a:95:78:34:da.
Are you sure you want to continue connecting (yes/no)? yes #选择yes,因为第一次登陆此远程主机,远程主机给客户端发送了他的公钥,保存在当前用户/root/.ssh/known_hosts 3.此时就可以免密登陆远程主机了
ssh root@192.168.1.1 #无需密码即可登录成功 #在centos7 服务端:
客户端主机传过来的公钥,一般保存在登录用户下,如root用户,/root/.ssh/authorized_keys文件里
关于authorized_keys文件里,第三列一般为客户端主机名,可有可无。即客户端主机更改了主机名,也不会影响到免密登录。第一列,ssh-rsa,与第二列客户端主机的公钥内容,不可缺少

  6.2 ssh免密登录思科cisco交换机

#此处客户端是centos7
#在centos7 客户端配置:
1.客户端生成一对密钥对(私钥和公钥)----使用ssh-keygen工具
ssh-keygen #输入此命令,回车
Enter file in which to save the key (/root/.ssh/id_rsa): #直接回车,密钥对默认保存在当前用户/.ssh/下
Enter passphrase (empty for no passphrase): #是否要给密钥对设立密码,用于二次认证,一般皆为不需要,直接回车
Enter same passphrase again: #在此输入密码,不需要,直接回车 2.将产生的公钥内容部分复制出来(不包含第一列ssh-rsa,和第三列客户主机名)
cat /root/.ssh/id_rsa.pub 3.完成以下服务端配置后,即可免密登录
ssh cisco@192.168.1.1 #服务端:思科cisco交换机配置
1.开启ssh服务:
ip domain-name TEST.LOCAL #设置域名,为了接下来生成密钥对
crypto key generate rsa modulus 2048 #生成密钥对
ip ssh version 2
line vty 0 4
transport input ssh
login local #以下俩条为可选,有些版本没有此命令
no ip ssh server authenticate user password #禁止用户名密码登录
no ip ssh server authenticate user keyboard 2.粘贴客户端的公钥内容
R1(config)#ip ssh pubkey-chain
R1(conf-ssh-pubkey)#username WINDOWS_USER #【重要】客户端密钥登录时,使用此用户名cisco登录
R1(conf-ssh-pubkey-user)#key-string
R1(conf-ssh-pubkey-data)#AAAAB3NzaC1yc2EAAAABJQAAAQEAijoMF9oBwyQxwYbVlFprz+fG8oe5uAcCxwMw
R1(conf-ssh-pubkey-data)#eIR1lyAnDJIsYbTbcdm+n5KiQnCt2561MpN4yOFpajFNM/dqH7/jYaqaicHCSV2F
R1(conf-ssh-pubkey-data)#RGauEp7FzN/uXxsX7mii6qOuxovl9OflLpXcvH5QH6551ycmL8nIv8UCY8uayiGI
R1(conf-ssh-pubkey-data)#INsC0LyKEctWDW6qWp43T7rhcP0y4JoMraTCZLIPNE0Bo0bHgnGLg6fEvJmyB3sX
R1(conf-ssh-pubkey-data)#H+7BaxHdYKg2OcIgVqYzclWhDwxj32kqd1BCq089iBMrb4QppDU2eM/t22iK29mn
R1(conf-ssh-pubkey-data)#eqOGTiCkxB80ix+KULT9okmqkj3TbhCpunTfuPCCRNrjqndBsw==
R1(conf-ssh-pubkey-data)#exit
R1(conf-ssh-pubkey-user)#exit
R1(conf-ssh-pubkey)#exit #ps1:在粘贴公钥内容的时候,不宜一次粘贴,cisco输入字符有长度限制,分多次少量粘贴
#ps2:通过密钥认证登录的用户cisco,他的权限级别,根据username cisco privilege 15 password cisco来决定
#ps3:一个用户cisco下可以设置多个公钥

SSH原理讲解与实践的更多相关文章

  1. ssh原理图解

    SSH(Secure Shell)是一种能够以安全的方式提供远程登录的协议,也是目前远程管理Linux系统的首选方式.在此之前,远程登录一般常用FTP和Telnet,但是它们以明文的形式在网络中传输账 ...

  2. 图解SSH原理

    1. 初见SSH SSH是一种协议标准,其目的是实现安全远程登录以及其它安全网络服务. SSH仅仅是一协议标准,其具体的实现有很多,既有开源实现的OpenSSH,也有商业实现方案.使用范围最广泛的当然 ...

  3. (转)图解SSH原理

    图解SSH原理 原文:https://www.jianshu.com/p/33461b619d53 http://blog.51cto.com/forlinux/1352900---------SSH ...

  4. LSTM和双向LSTM讲解及实践

    LSTM和双向LSTM讲解及实践 目录 RNN的长期依赖问题LSTM原理讲解双向LSTM原理讲解Keras实现LSTM和双向LSTM 一.RNN的长期依赖问题 在上篇文章中介绍的循环神经网络RNN在训 ...

  5. Redis深度历险——核心原理与应用实践

    高可用架构」的各位老铁们,你们好!你是否还记得上个月发布的文章中,有两篇深入讲解Redis的文章,分别是和,广大粉丝读者们对这两篇文章整体评价颇高.而我就是这两篇文章的原创作者「老钱」(钱文品),我是 ...

  6. 使用Keras进行深度学习:(七)GRU讲解及实践

    ####欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 介绍 GRU(Gated Recurrent Unit) ...

  7. 使用Keras进行深度学习:(六)LSTM和双向LSTM讲解及实践

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 介绍 长短期记忆(Long Short Term Memory, ...

  8. 使用Keras进行深度学习:(五)RNN和双向RNN讲解及实践

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 笔者:Ray 介绍 通过对前面文章的学习,对深度神经网络(DNN) ...

  9. Navicate 连接阿里云MySQL(两种方式及原理讲解)

    Navicate 连接阿里云(两种方式及原理讲解) 一.直连方式(通过3306端口) 1.概述 2. 环境准备 3.操作及讲解 二.使用SSH通道 1.概述 2.环境准备 3.操作及讲解 如果对你有帮 ...

随机推荐

  1. AKKA 集群中的发布与订阅Distributed Publish Subscribe in Cluster

    Distributed Publish Subscribe in Cluster 基本定义 在单机环境下订阅与发布是很常用的,然而在集群环境是比较麻烦和不好实现的: AKKA已经提供了相应的实现,集群 ...

  2. 【基础算法-模拟-例题-*校长的问题】-C++

    为什么在题目前面打上星号呢? 这道题的正解不是模拟! 正解树状数组! 正解树状数组! 正解树状数组! 重要的事情说够三遍了! 但是,歪解模拟因为数据水都能AC! 因为这道题放在模拟专题中,所以我们就讨 ...

  3. EF简介及CRUD简单DEMO

    一.实体框架(Entity FrameWork)简介 • 简称EF • 与Asp.Net MVC关系与ADO.NET关系 • ADO.NET Entity FrameWork是微软以ADO.NET为基 ...

  4. Python登录豆瓣并爬取影评

    上一篇我们讲过Cookie相关的知识,了解到Cookie是为了交互式web而诞生的,它主要用于以下三个方面: 会话状态管理(如用户登录状态.购物车.游戏分数或其它需要记录的信息) 个性化设置(如用户自 ...

  5. 个人永久性免费-Excel催化剂功能第75波-标签式报表转标准数据源

    数据处理永远是数据分析工作中重中之重的任务,大部分人深深地陷入在数据处理的泥潭中,今天Excel催化剂再接再厉,在过往已提供了主从结构报表数据源的数据转换后,再次给大家送上标签式报表数据源的数据转换操 ...

  6. 个人永久性免费-Excel催化剂功能第67波-父子结构表转换添加辅助信息之子父关系篇

    Excel作为一款数据领域的万物互联工具,连接一切外部的多种多样的数据源.将数据带到Excel的环境中,再进行数据处理.转换.统计分析等工作,是众多表哥表姐们每天都在经历的事情.能最快速将其他来源数据 ...

  7. Spring+SpringMVC+mybatis maven pom文件

    pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w ...

  8. C# backgroundwork的使用方法

    引言:在 WinForms 中,有时要执行耗时的操作,在该操作未完成之前操作用户界面,会导致用户界面停止响应.解决的方法就是新开一个线程,把耗时的操作放到线程中执行,这样就可以在用户界面上进行其它操作 ...

  9. 数据库---T-SQL语句:查询语句(二)

    >查询: 一.查询所有数据: select * from Info    ---查询所有数据(行) select Name from Info  ---查询特定列(Name列) select N ...

  10. [NLP] 相对位置编码(二) Relative Positional Encodings - Transformer-XL

    参考: 1. Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context https://arxiv.org/pdf ...