RHCE(三)SSH原理与运用

什么是远程连接服务器

远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录linux主机以取得可操作主机接口(shell),而登录后的操作感觉就像是坐在系统前面一样。

远程连接服务器的功能

   1、分享主机运算能力
   2、服务器类型有限度开放连接
   3、工作站类型,只对内网开放

常见的远程管理工具方式

  |--RDP(remote desktop protocal )协议,windows远程桌面管理(图形界面)
  |--telenet CLI界面下远程管理,几乎所有操作系统都有(内容明文传输)   端口23
  |--ssh  CLI界面下的远程管理,几乎所有操作系统都有(内容加密传输)    端口22
  |--RFB (remote frame buffer) 图形化远程管理协议 VNC (Virtual Network Computing)使用的协议。(在linux unix Macos 下
  图形界面远程管理工具)

SSH简介

1.SSH代表安全外壳(Secure Shell),SSH为建立在应用层和传输层基础上的安全协议。
2.SSH默认情况下通过端口22运行;不过很容易更改这个端口。
3.SSH是一种非常安全的协议,因为它共享并发送经过加密的信息,从而为通过互联网等不安全的网络访问的数据提供了机密性        		  和安全性。
4.一旦通讯的数据使用SSH经过加密,就极难解压和读取该数据,所以我们的密码在公共网络上传输也变得很安全。
5.SSH还使用公钥用于对访问服务器的用户验证身份,这是一种很好的做法,为我们提供了极高的安全性。
6.SSH主要用在所有流行的操作系统上,比如Unix、Solaris、Red-Hat Linux、CentOS和Ubuntu等。
7.ssh服务端由2部分组成: openssh(提供ssh服务)    openssl(提供加密的程序)
8.ssh的客户端可以用 XSHELL,Securecrt, Mobaxterm等工具进行连接,ssh sftp

SSH加密原理

如何实现加密

SSH算法

SSH为了确保信息的安全传输,从连接发起到完成各阶段的各个点SSH协议采用了许多不同类型的数据加密技术,包括可逆的对称加密,非对称加密以及不可逆的哈希散列。

SSL/tls (Transport Layer Security 传输层安全协议)

SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
Secure Socket Layer,为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。一般通用之规格为40 bit之安全标准,美国则已推出128 bit之更高安全标准,但限制出境。只要3.0版本以上之I.E.或Netscape浏览器即可支持SSL。

ssl提供服务

 1、认证用户和服务器,确保数据发送到正确的客户机和服务器;  握手协议
 2、加密数据以防止数据中途被窃取;                                          ssl记录协议
 3、维护数据的完整性,确保数据在传输过程中不被改变。     

加密技术:

对称秘钥加密

共享密钥加密(对称密钥加密):加密和解密同用一个密钥。加密时就必须将密钥传送给对方,那么如何安全的传输呢 md5 核心是:加密类型

非对称秘钥加密

公开密钥加密(非对称密钥加密):公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,一把叫做公开密钥。私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。使用此加密方式,发送密文的一方使用公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听盗走
核心是:算法RSA

1、服务端创建公钥和私钥。
2、客户端请求访问服务端时,服务端要求客户端下载数据,该数据就是公钥。
3、接下来客户端发送的数据都需要通过公钥加密发送。
4、服务端接收到数据,使用私钥解密即可。

中间人攻击

SSH之所以能够保证安全,原因在于它采用了公钥加密。

整个过程是这样的:
(1)远程主机收到用户的登录请求,把自己的公钥发给用户。
(2)用户使用这个公钥,将登录密码加密后,发送回来。
(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。
可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。
SSH协议是如何应对的呢?

ssh俩种验证级别

(一)口令登录

如果你是第一次登录对方主机,系统会出现下面的提示:

$ ssh user@host

  The authenticity of host 'host (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)?

这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?
所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0🇩🇪9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。
很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。
假定经过风险衡量以后,用户决定接受这个远程主机的公钥。

Are you sure you want to continue connecting (yes/no)? yes

系统会出现一句提示,表示host主机已经得到认可。

Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.

然后,会要求输入密码。

Password: (enter password)

如果密码正确,就可以登录了。
当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。
每个SSH用户都有自己的known_hosts文件,此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。

(二)公钥登录

使用密码登录,每次都必须输入密码,非常麻烦。好在SSH还提供了公钥登录,可以省去输入密码的步骤。
所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个。

用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。 第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒。

SSH配置文件

1.#Port 22                                      监听端口,默认监听22端口   【默认可修改】
2.#AddressFamily any                   IPV4和IPV6协议家族用哪个,any表示二者均有
3.#ListenAddress 0.0.0.0              指明监控的地址,0.0.0.0表示本机的所有地址  【默认可修改】
6.#Protocol 2                                使用SSH第二版本,redhat7默认第一版本已拒绝
16.#ServerKeyBits 1024              主机秘钥长度
22.SyslogFacility AUTHPRIV       当有人使用ssh登录系统的时候,SSH会记录信息,信息保存在/var/log/secure里面
23.#LogLevel INFO                     日志的等级 全部
24.# Authentication:
25.#LoginGraceTime 2m            登录的宽限时间,默认2分钟没有输入密码,则自动断开连接
26.#PermitRootLogin no
27.PermitRootLogin yes             是否允许管理员直接登录,'yes'表示允许
28.#StrictModes yes                   是否让sshd去检查用户主目录或相关文件的权限数据
29.#MaxAuthTries 6                   最大认证尝试次数,最多可以尝试6次输入密码。之后需要等待某段时间后才能再次输入密码
30.#MaxSessions 10                  允许的最大会话数
51.PasswordAuthentication yes                    是否允许支持基于口令的认证
96.#UseDNS yes                        是否反解DNS,如果想让客户端连接服务器端快一些,这个可以改为no
110.Subsystem sftp /usr/libexec/openssh/sftp-server                    支持 SFTP ,如果注释掉,则不支持sftp连接
117.AllowUsers user1 user2            登录白名单(默认没有这个配置,需要自己手动添加),允许远程登录的用户。如果名单                    
                                      中没有的用户,则提示拒绝登录 

SSH免密设置

SSH建立连接的完整过程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章