一文讲清楚SSH技术原理

  1. SSH 是什么
    SSH(Secure Shell)是一个提供数据通信安全、远程登录、远程指令执行等功能的安全网络协议,也叫做安全外壳协议。SSH 用于加密两台计算机之间的通信,并且支持各种身份验证机制。其本质上是进行加密的 Shell,它既可以代替 Telnet,又可以为 FTP、POP等提供一个安全的“通道”。
    几乎主流的UNIX平台都能运行 SSH,现在主流的开源实现是 OpenSSH,并且基本所有的 Linux 发行版都自带 OpenSSH。
    SSH目前主要有两个不兼容的版本——SSH1 和 SSH2。SSH2 在安全性和特性方面都优于SSH1,项目中发现某些网络设备使用 SSH1 协议。
  2. SSH 为什么是安全的
    传统的网络服务协议如:FTP、POP 和 Telnet 在本质上都是不安全的,因为它们在网络上用明文的方式传送口令和数据,非常容易被截获。其次,这些服务程序的安全验证方式也是有其弱点的,非常容易受到“中间人攻击”(Man-in-the-MiddleAttack,简称MITM)。所谓“中间人”的攻击方式,就是“中间人”冒充真正的 Server 接收你的传给 Server 的数据,然后再冒充你把数据传给真正的服务器。Server 和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现非常严重的问题。
    SSH 则通过非对称加密解决了上述问题。
    在这里插入图片描述

对称加密:数据的加密和解密使用的是同一个秘钥;
非对称加密:在进行数据加密处理的时候通常使用公钥对数据进行加密,私钥进行解密,安全性更高。
3. SSH 认证类型
SSH 主要提供密码口令和秘钥认证两种认证类型。
3.1 基于密码口令认证
基于口令的安全验证的方式就是大家现在一直在用的,只要知道服务器的SSH连接帐号和口令(当然也要知道对应服务器的 IP及开放的 SSH端口,默认为22 ),就可以通过 SSH 客户端登录到这台远程主机。此时,联机过程中所有传输的数据都是加密的。
密码口令认证示意图如下:
在这里插入图片描述

密码口令认证流程:
1.客户端向服务端发起连接请求;
2.服务端收到请求,并将自己生成的公钥返回给客户端;
3.客户端用返回来的公钥加密自己的登录密码,发送给服务端;
4.服务端用自己的私钥解密,并验证密码是否正确,如果正确,允许登录。
密码口令认证的缺点:
繁琐,每次登陆服务器都需要输入密码,短的密码不安全,长的密码不好记。(可以通过 JumpServer 托管密码解决)
安全性差,易受“中间人攻击”,面临「客户端如何保证接受到的公钥就是目标服务端的?」,而基于秘钥认证的方案则可以有效解决这一问题。
3.2 基于密钥认证
秘钥认证很好的解决了密码口令认证易受“中间人攻击”的问题,通过事前创建的包含公钥和私钥的密钥对来实现。
其中,私钥不能在网络中传输—私钥可以解密公钥;公钥可以再网路中传输—公钥不能解密私钥。(关于私钥解密公钥我们将在后面的章节里结合 JumpServer 推送用户和批量改密时展开介绍)
在这里插入图片描述

密钥认证登录流程:
1.用户手动将客户端的公钥追加至服务端的 ~/.ssh/authorized_keys ,私钥自己保管;
2.服务端收到请求,在 authorized_keys 中匹配客户端的公钥,并生成随机数 X ,用客户端的公钥对 X 进行加密得到 Y,然后将 Y 返回给客户端;
3.客户端通过私钥对 Y 进行解密得到 X,然后对 X 和本次会话的 SessionKey 利用 MD5 生成摘要 Digest1,并发送至服务端;
4.服务端也对 X 和 SessionKey 使用通用的摘要算法生成 Digest2;
5.服务端比较 Digest1 和 Digest2 是否相同,完成认证过程。

  1. SSH 密钥认证登录配置方法
    4.1 生成密钥对
    [root@ecs-3f41 opt]# ssh-keygen -t rsa -C XusongKeyPair -f xusong
    Generating public/private rsa key pair.
    Enter passphrase (empty for no passphrase): <== 若需要,可在此输入私钥的密码,或直接按 Enter 留空
    Enter same passphrase again:
    Your identification has been saved in xusong.
    Your public key has been saved in xusong.pub.
    The key fingerprint is:
    SHA256:pqLH42sjuZXsmspSbIG34j7Meb6qb315Z6LY0YA+8vE XusongKeyPair
    The key’s randomart image is:
    ±–[RSA 2048]----+
    | |
    | |
    | . |
    |. o . |
    | o o. . S |
    |. =o . = |
    |++o+O o… |
    |o*+OBBo.o o |
    |*B@XB=Eo + |
    ±—[SHA256]-----+

私钥密码在需要时可配置,不需要时留空即可
现在,在当前目录下生成私钥 xusong 和公钥 xusong.pub 两个文件。若执行 ssh-keygen 时不指定 -f,则在用户的家目录中生成了一个 .ssh 的隐藏目录,内含私钥 id_rsa 和公钥 id_rsa.pub 两个文件。
4.2 在服务器上添加公钥
方式一:
#客户端执行 ssh-copy-id 将公钥直接复制到服务端
[root@ecs-3f41 opt]# ssh-copy-id -i xusong root@119.3.1.83

方式二:
#先将公钥复制到服务端,然后追加到 authorized_keys 中
[root@ecs-84a2 opt]# cat xusong.pub >> authorized_keys

方式三:
#本地直接打开公钥文件,并拷贝公钥到服务端的 authorized_keys 中
注意:
方式三需注意避免换行符;
方式二和方式三需使用追加的方式,避免覆盖;
authorized_keys 文件权限需配置为 600, ~/.ssh/ 目录权限需配置为 700 ,否则无法使用秘钥连接

4.3 测试登录
服务端开启密钥登入的认证方式
#打开SSH服务配置文件
[root@ecs-84a2 opt]# vim /etc/ssh/sshd_config

#约在43行,开启秘钥登录
PubkeyAuthentication yes

#重启SSH服务
[root@ecs-84a21 opt]# systemctl restart sshd
客户端使用密钥登录服务器
[root@3f41 opt]# ssh -i xusong test@134.175.220.42
Enter passphrase for key ‘xusong’:
Last failed login: Mon Feb 6 18:46:10 CST 2023 from 221.214.211.122 on ssh:notty
There were 7 failed login attempts since the last successful login.
Last login: Mon Feb 6 14:30:36 2023 from 43.254.45.44

  • 19
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值