关于SSH

事情的起因是隔壁实验室服务器被黑后拿来挖矿,询问了一番,对方是直接ssh登录服务器后直接wget挖矿脚本,由于密码设置的比较简单,可能在ip暴露情况下直接暴力破解了,先来看下基本概念。

  • 非对称加密:它包含两套秘钥 - 公钥以及私钥,**其中公钥用来加密,私钥用来解密,**并且通过公钥计算不出私钥,因此私钥谨慎保存在服务端,而公钥可以随便传递,即使泄露也无风险。

  • 保证SSH安全性的方法,简单来说就是客户端和服务端各自生成一套私钥和公钥,并且互相交换公钥,这样每一条发出的数据都可以用对方的公钥来加密,对方收到后再用自己的私钥来解密。

  • SSH(secure shell)是建立在应用层上的安全协议。传统的一些服务,比如ftp,telnet本质上不是安全的,因为是用明文来 传输 数据,所以可能会有中间人攻击。SSH会把传输的数据进行加密。

在这里插入图片描述

两种级别安全验证(对应两种登陆方式)

(1) 基于用户名和密码

在这里插入图片描述

  1. 服务端收到登录请求后,首先互换公钥
  2. 客户端用服务端的公钥加密账号密码并发送
  3. 服务端用自己的秘钥解密后得到账号密码,然后进行验证
  4. 服务端用客户端的公钥加密验证结果并返回
  5. 客户端用自己的秘钥解密后得到验证结果

(2)配置公钥和私钥后免密登录
有些时候并不是开发者手动去连接服务器,而是客户端的程序需要连接到服务器,这时候用密码登录就比较不方便,一是需要处理输入密码的问题,二是需要想办法安全的储存密码到程序里,这种情况下便可以利用公钥来进行无密码登录。

  1. 客户端用户必须手动地将自己的公钥添加到服务器一个名叫authorized_keys的文件里,顾名思义,这个文件保存了所有可以远程登录的机器的公钥。
  2. 客户端发起登录请求,并且发送一个自己公钥的指纹(具有唯一性,但不是公钥)
  3. 服务端根据指纹检测此公钥是否保存在authorized_keys中
  4. 若存在,服务端便生成一段随机字符串,然后利用客户端公钥加密并返回
  5. 客户端收到后用自己的私钥解密,再利用服务端公钥加密后发回
  6. 服务端收到后用自己的私钥解密,如果为同一字符串,则验证通过

是否可以完全避免中间人攻击?

也不是,其实在流程中也可以看出来,初次建立连接过程,客户端和服务端会传递各自公钥
在这里插入图片描述
在首次服务端返回公钥到客户端的时候,客户端其实无法判断对方是否可信,如果在这里已经被劫持了,就没办法了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值