美文网首页
SSH原理学习总结+Ubuntu上实践启动SSH

SSH原理学习总结+Ubuntu上实践启动SSH

作者: 时间煮菜 | 来源:发表于2019-09-26 19:58 被阅读0次

SSH定义

  • SSH全称为Secure Shell,中文意思为安全外壳协议
  • SSH是一种协议标准,专门为远程登录和其他网络服务提供安全性保证的一种协议。

SSH的历史溯回

SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。

为什么要使用SSH

首先我们要了解一个问题,我们为什么需要使用SSH协议?SSH协议到底能为我们提供什么好处呢?

传统的网络服务程序,如ftp、pop和telnet等传输方式,实际上都存在着极大的安全隐患。因为他们在网络上都是用明文传输口令和数据。这些口令和数据很容易就会被人截获。造成难以估计的损失。

这个时候,我们就需要使用SSH,通过SSH我们可以把所有传输的数据进行加密,这样就不会被人盗取数据了。SSH还有一个好处就是传输的数据是经过压缩的,因此可以加快传输的速度。

可以说,SSH为我们提供了一个既安全又快捷的“通道”。

SSH的工作原理

说完了SSH的优点。那么接下来问题来了。我们怎么样对数据进行加密来保障安全性呢?加密的方式一共有两种:

  1. 对称加密(也称为秘钥加密)
  2. 非对称加密(也称为公钥加密)

那么我们接下来来详细介绍一下这两种加密方式:

对称加密

指加密和解密的时候使用同一套秘钥

  • 优点:对称加密的加密强度高,很难破解。
  • 缺点:对称加密的密钥一旦被窃取,那么整个系统的安全性就彻底被摧毁了。

因此,为了解决这个问题,非对称加密产生了。非对称加密有两个密钥:“公钥”“私钥”

非对称加密

两个密钥:“公钥”“私钥”

  • 特性:公钥加密后的密文,只能用私钥解密。公钥和私钥分离,机会解不开。
  • 在Client和Server各有一个密钥,这样即使在Client端发送解密被盗取公钥时,Sever端还有一个独自的私钥才能解密。这样就保证了数据的安全性。
非对称加密流程
  1. Client向Server发送登录请求,Server把自己的公钥发送给Cilent

  2. Client使用这个公钥,对密码进行加密。

  3. Client将加密的密码发送给Server端。

  4. 远程Server用自己的私钥进行解密登录密码,然后验证其合法性

  5. 验证结果若合法,对Client作出相应的相应。

    注意:私钥是Server独有的,这样就保证了即使Cilent的登录信息被盗取,也没有用私钥进行解密,这样就保证了数据的安全性。

    问题:这样就一定能保证安全了吗?

    我们来想一个问题,如果Client端发送登录请求的时候被拦截,拦截者发送了自己的公钥给Client端,Client端用恶意的公钥进行加密,加密之后拦截者再用自己的私钥进行解密,这样Client端的信息还是会被窃取,这种方式就称为中间人攻击

SSH如何解决中间人攻击问题

基于口令的认证

为了解决中间人攻击问题,就要对Server的公钥进行认证,判断是否为中间人。可是SSH的公钥和私钥都是自己自动生成的,没办法公正,所以我们只能通过Client端自己对公钥进行确认。

通常在我们第一次登陆的时候,系统会让我们进行认证:

The authenticity of host 'ssh-server.example.com (12.18.429.21)' can't be established.
RSA key fingerprint is 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)? 

上面的信息说的是:无法确认主机ssh-server.example.com(12.18.429.21)的真实性,不过知道它的公钥指纹,是否继续连接?

当我们输入yes之后,会出现以下提示:

Warning: Permanently added 'ssh-server.example.com,12.18.429.21' (RSA) to the list of known hosts. 
Password: (enter password) 

表明host已被确认,并被追加到文件known_hosts中,接下来输入密码就可以了。

基于公钥认证

上述基于口令认证的过程中,每次登陆都需要输入密码,很麻烦。因此SSH提供了一种免去输入密码过程的登录方式:公钥登录。

基于公钥认证流程:

  1. Client将自己的公钥存放在Server上,追加在authorized_keys中。
  2. Server端接收到Client的连接请求后,会在authorized_keys中匹配是否有Client之前存放的公钥pubKey,匹配到了之后生成随机数R,用Client的公钥对该随机数进行加密得到pubKey(R),然后将加密后信息发送给Client。
  3. Client端通过私钥进行解密得到随机数R,然后对随机数R和本次对话的SessionKey利用MD5生成摘要Digest1,发送给Server端。
  4. Server端也会对R和SessionKey利用同样摘要算法生成Digest2
  5. Server端最后会比较Digest1和Digest2是否相同,完成认证过程。

我们在基于公钥认证的流程的步骤1中提到,Client要自己手动讲公钥存放在Server上。

需要用户手动将自己的公钥copy上。如下图是GitHub上配置SSH。

GitHub上配置SSH

SSH实践

SSH的安装

本机安装实践是在基础win10+Ubuntu 上进行的

SSH分为客户端openssh-client和服务器openssh-server,输入一下命令确认电脑上是否安装了客户端和服务器

~$ dpkg -l | grep ssh
确认服务器和客户端

如上图所示,Ubuntu默认安装了客户端和服务器,这样就不用我们再安装了。

如果想要远程登录别的机器要安装客户端,要开放本机的SSH服务要安装服务器。

如果你的电脑上没有客户端和服务器,以下指令可以安装客户端和服务器:

~$ sudo apt-get install openssh-client
~$ sudo apt-get install openssh-server
安装客户端和服务器
启动服务器的SSH服务

我们安装准备都完成了之后,我们要来确认一下ssh-server是否已经启动了

~$ ps -e | grep ssh
启动服务器

有上图所示表明服务器已经启动了。如果你输入指令之后什么都没显示,那么输入下面的指令:

~$ sudo /etc/init.d/ssh start
~$ ps -e | grep ssh
启动服务器

这样就顺利启动了。

停止和重启SSH服务的指令如下:

~$ sudo /etc/init.d/ssh stop  #server停止SSH服务 
~$ sudo /etc/init.d/ssh restart  #server重启SSH服务

此篇SSH学习谨向简书博主TopGun_Viper写的https://www.jianshu.com/p/33461b619d53图解SSH原理的学习笔记和总结。有兴趣的同学可以移步。

相关文章

网友评论

      本文标题:SSH原理学习总结+Ubuntu上实践启动SSH

      本文链接:https://www.haomeiwen.com/subject/foseuctx.html