zoukankan      html  css  js  c++  java
  • 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连接远程主机时,会提示你如下信息:

    image

         可以看到远程主机给我们提供了fingerprint,即服务端的公钥指纹,一般是生成公钥的MD5码,可能会放在某个网站上进行公示,表明这个某某主机的fingerprint,从而客户端据此确定连接的是不是目标远程主机,如果是则输入yes,然后在输入密码,之后这个远程主机就会加入到客户端的 .ssh/known_host 文件中。下次连接时,客户端就会跳过验证host阶段,只要要你输入密码,即可连接到远程主机上。

    2. 基于公钥的验证

       基于公钥的验证是指客户端将客户端的公钥文件发送到服务端的 .ssh/authorized_keys 文件中。之后客户端请求服务端,客户端会发送一个随机字符给服务端,服务端使用authorized_keys 即 客户端的公钥加密后,发送给客户端,客户端使用自己的私钥解密,再比较之前发送的字符串和解密后的字符串是否一致,如果一致,代表与之连接的服务端是真的服务端。之后连接就不需要输入密码,就可以和服务端建立连接了。

    image

    三、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
  • 相关阅读:
    trackr: An AngularJS app with a Java 8 backend – Part III
    trackr: An AngularJS app with a Java 8 backend – Part II
    21. Wireless tools (无线工具 5个)
    20. Web proxies (网页代理 4个)
    19. Rootkit detectors (隐形工具包检测器 5个)
    18. Fuzzers (模糊测试器 4个)
    16. Antimalware (反病毒 3个)
    17. Debuggers (调试器 5个)
    15. Password auditing (密码审核 12个)
    14. Encryption tools (加密工具 8个)
  • 原文地址:https://www.cnblogs.com/glsy/p/8733466.html
Copyright © 2011-2022 走看看