SSH原理讲解与实践
一、简介
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原理讲解与实践的更多相关文章
- ssh原理图解
SSH(Secure Shell)是一种能够以安全的方式提供远程登录的协议,也是目前远程管理Linux系统的首选方式.在此之前,远程登录一般常用FTP和Telnet,但是它们以明文的形式在网络中传输账 ...
- 图解SSH原理
1. 初见SSH SSH是一种协议标准,其目的是实现安全远程登录以及其它安全网络服务. SSH仅仅是一协议标准,其具体的实现有很多,既有开源实现的OpenSSH,也有商业实现方案.使用范围最广泛的当然 ...
- (转)图解SSH原理
图解SSH原理 原文:https://www.jianshu.com/p/33461b619d53 http://blog.51cto.com/forlinux/1352900---------SSH ...
- LSTM和双向LSTM讲解及实践
LSTM和双向LSTM讲解及实践 目录 RNN的长期依赖问题LSTM原理讲解双向LSTM原理讲解Keras实现LSTM和双向LSTM 一.RNN的长期依赖问题 在上篇文章中介绍的循环神经网络RNN在训 ...
- Redis深度历险——核心原理与应用实践
高可用架构」的各位老铁们,你们好!你是否还记得上个月发布的文章中,有两篇深入讲解Redis的文章,分别是和,广大粉丝读者们对这两篇文章整体评价颇高.而我就是这两篇文章的原创作者「老钱」(钱文品),我是 ...
- 使用Keras进行深度学习:(七)GRU讲解及实践
####欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 介绍 GRU(Gated Recurrent Unit) ...
- 使用Keras进行深度学习:(六)LSTM和双向LSTM讲解及实践
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 介绍 长短期记忆(Long Short Term Memory, ...
- 使用Keras进行深度学习:(五)RNN和双向RNN讲解及实践
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 笔者:Ray 介绍 通过对前面文章的学习,对深度神经网络(DNN) ...
- Navicate 连接阿里云MySQL(两种方式及原理讲解)
Navicate 连接阿里云(两种方式及原理讲解) 一.直连方式(通过3306端口) 1.概述 2. 环境准备 3.操作及讲解 二.使用SSH通道 1.概述 2.环境准备 3.操作及讲解 如果对你有帮 ...
随机推荐
- c++小游戏——扫雷
#include<cstdio> #include<cstring> #include<algorithm> #include<conio.h> #in ...
- go 学习笔记之初识 go 语言
Go 是一种开源编程语言,可以轻松构建简单,可靠,高效的软件. 摘录自 github: https://github.com/golang/go,其中官网(国外): https://golang.or ...
- 个人永久性免费-Excel催化剂功能第94波-地图数据挖宝之搜索地图上的各种兴趣点数据(商铺名、地名、公共设施等)
终于来到最激动人心的地图应用场景,将地图上的有价值的兴趣点数据一网打尽,全都收录在自己的数据源中,这个价值有多大,想想都兴奋,无数的商业场景可供挖掘,假如你还无动于衷,那要好好反思下自己做的数据分析的 ...
- hadoop之安装hadoop
官网 http://hadoop.apache.org/ 下载页:https://hadoop.apache.org/releases.html 上传安装包到Linux 解压并进入到目录下 [root ...
- HashMap源码__tableSizeFor方法解析
tableSizeFor(int cap)方法返回不小于指定参数cap的最小2的整数次幂,具体是怎么实现的呢?看源码! /** * Returns a power of two size for th ...
- VMWare虚拟机:三台虚拟机互通且连网
虚拟机:三台虚拟机互通且连网 目录 一.虚拟机 相关软件 虚拟机安装 Linux系统安装 1) 使用三个Linux虚拟机 多台虚拟机互通且上网 1) 多台配置注意事项 2) 虚拟机软件的配置 3) W ...
- python元类深入理解
1.python 中的类 在python中,类也是一个对象,只不过这个对象拥有生成实例的能力,我们一般使用class XXX来定义一个类,在python解释器执行到这个地方的时候会自动创建出这个对象, ...
- Android的简述2
android提供了三种菜单类型,分别为options menu,context menu,sub menu. options menu就是通过按home键来显示,context menu需要在vie ...
- session对象和cookie对象的区别
1.cookie数据存放在客户的浏览器上,session数据放在服务器上2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session3.ses ...
- VIM常用命令速查(转)