SSH 密钥身份验证和管理

安全外壳协议(Security Shell Protocol)是一种应用于计算机网络的安全通信协议,其提供的服务可用于保护网络上的连接和数据传输安全性,其核心思想是为网络上的两台计算机之间搭建一个安全的外壳,以保护数据传输的安全性。

安全外壳协议的工作原理是,它在网络两端的两台计算机间搭建一个安全的外壳,用以保护传输数据的安全性,此外,它还会检验发送数据的完整性、实现发送数据的加密,并监测保护传输连接。

安全外壳协议主要由三个重要部分构成:加密技术、身份认证技术、认证机制。

  • 加密技术:是安全外壳协议的重要组成部分,它可以有效保护发送数据的安全性,它可以把数据加密成一种特殊的代码,以阻止非法者获取敏感信息。
  • 身份认证技术:是安全外壳协议的另一个重要组成部分,它的用途是验证被授权用户的身份,确保只有知道被认证的实体才能訪問系统中的数据和系统资源。
  • 认证机制:是安全外壳协议的重要组成部分,它用于检验对密码和身份认证技术的使用,以确保传输连接和数据传输得到保护。

安全外壳协议被广泛应用于网络安全领域,用来保护网络连接和数据传输的安全性,以防止非法者获取系统中的数据和资源,它具有安全性高、功能强大的特点,能够有效的保护各类网络环境。此外,它还可以用来检查密码和身份认证技术的使用,以确保传输连接和数据传输安全。

什么是 SSH(安全外壳)密钥

SSH(安全外壳)密钥是 SSH 协议中的身份验证凭据。从技术上讲,它们是负责加密的加密密钥,但在功能上,它们的工作方式与密码非常相似,在企业内部,SSH 密钥主要用于授予对远程系统的安全访问权限。基于密钥的身份验证(通常称为公钥身份验证)使用一对密钥(公钥和私钥)对远程设备上的用户进行身份验证。

  • 公钥或授权密钥:负责向访问远程系统的用户授予登录访问权限。人们可以将授权密钥想象成锁,向拥有正确密钥(在本例中为相应私钥)的人授予访问权限。授权密钥是为每个用户帐户单独配置的,通常存在于用户主目录的 .ssh/authorized_keys 文件中。
  • 私钥或身份密钥:允许用户在 SSH 服务器上对自己进行身份验证。私钥类似于真正的密钥,当匹配时,可以打开一个或多个锁。与公钥相反,私钥需要在安全的地方进行保护,否则它们最终可能会落入坏人之手,从而导致特权被滥用。

什么是 SSH 密钥身份验证过程

基于SSH的公钥身份验证是通过生成一对不同的密钥(公钥和私钥)来实现的,以便与远程系统建立连接。在远程计算机上进行身份验证的用户需要拥有私钥,而公钥应放置在用户要连接到的目标系统中。

  • 生成 SSH 身份验证密钥:登录到要从中建立远程连接的服务器。使用 SSH 密钥生成工具(如 PuTTYgen)生成密钥对。您还可以在创建密钥对时添加可选密码,以提供额外的安全层。
  • 将公钥复制到远程系统:生成密钥对后,将公钥传输到目标远程系统。确保公钥文件位于所需远程服务器的 ~/.ssh/authorized_keys 目录下。在这里,您必须提供在上一步中创建的密码。
  • 启动远程 SSH 会话:将公钥部署到目标服务器后,可以从系统中打开与这些服务器的 SSH 连接。

以下是 SSH 密钥身份验证过程在后台发生的方式。

  • 客户端首先将 ID 发送到它希望在远程服务器中进行身份验证的密钥对。
  • 服务器检查客户端尝试登录的帐户中是否有具有相同密钥 ID 的公钥。
  • 如果找到匹配的公钥,服务器会生成一个随机数,使用公钥对其进行加密,并将其发送到客户端。
  • 客户端使用私钥解密消息,并在会话密钥的帮助下计算消息的 MD5 哈希值。
  • 然后,客户端对哈希值进行加密,并将其发送到服务器。
  • 同时,服务器还计算发送到客户端的消息的 MD5 哈希值(借助会话密钥)。如果这两个值匹配,则证明客户端拥有相应的私钥,并且客户端在服务器上进行了身份验证。

在这里插入图片描述

在开始 SSH 密钥身份验证过程之前,请确保客户端和服务器都安装了工作版本的 SSH,基于密钥的身份验证的一大优点是,如果实施得当,它可以极大地简化身份验证过程,并将其安全性提高数倍。

为什么需要保护 SSH 密钥

尽管人们对 SSH 密钥管理不善和风险产生了认识,但大多数企业都遵循分散的密钥创建和使用方法,随着时间推移,这会导致密钥激增,而每个密钥提供的访问范围的可见性大大降低。SSH 密钥管理不善会以多种方式给企业带来麻烦,包括:

  • 外部攻击:当攻击者获得对孤立的 SSH 密钥的访问权限时,他们能够建立立足点并轻松地在网络内移动,因为基于密钥的网络是紧密交织在一起的。然后,攻击者可以将其权限提升为 root 访问权限,从关键任务系统中窃取敏感数据,并创建后门进行永久访问。
  • 内部攻击:SSH 密钥管理不善也是导致内部攻击的主要原因,心怀不满的员工或恶意的第三方供应商或承包商可以访问对特权系统进行身份验证的密钥,并最终掠夺敏感数据。

关于这些攻击的一件棘手的事情是,由于 SSH 密钥很少轮换,它们将继续留在坏人手中,直到它们以某种方式被发现并终止其访问。

  • 不合规风险:SSH 密钥管理对于企业遵守各种强制性行业法规(如 SOX、FISMA、PCI 和 HIPAA)也至关重要。未能整合适当的 SSH 密钥管理系统可能会导致公司违反合规要求,并付出巨大的代价。

SSH 密钥管理

SSH 密钥管理是保护和自动化分布在企业中的 SSH 密钥生命周期的过程,从创建到将其部署到必要的端点、启动远程会话、监控密钥用户映射、执行密钥轮换以及定期删除未使用或不需要的密钥。SSH 密钥属于始终管理不足的关键数字资产类别。实施定义明确的管理流程有助于企业全面了解其 SSH 环境,并防止因未经授权访问 SSH 密钥而导致的权限滥用。

以下是一些步骤,可帮助 SSH 密钥管理:

  • 发现和整合:管理 SSH 密钥的第一步是发现网络中的现有密钥,并将它们整合到一个集中式存储库中。
  • 映射信任关系:将所有 SSH 密钥收集到一个位置后,您必须跟踪现有的信任关系,以清楚地了解每个密钥授予的访问范围,然后,您必须制定密钥用户映射,这将帮助您确定网络中对特权帐户具有 root 访问权限的用户数量。
  • 创建和部署新的 SSH 密钥对:现在,您可以完全了解 SSH 环境,请扫描并删除不再使用的 SSH 密钥,此处的最佳实践方法是通过删除与网络中各种用户帐户关联的所有 SSH 密钥来重新开始,并将其替换为新创建的密钥对。
  • 简化 SSH 密钥创建和部署:对于密钥生成,强烈建议您通过管理集中式框架来简化该过程,该框架仅允许具有特定权限的用户创建密钥并将其部署到网络中的系统,这样一来,您就可以在组织内的信任关系中占据上风,并且能够防止 SSH 密钥扩散。
  • 实施精细的访问控制:将新的密钥对部署到目标系统后,必须根据用户角色定义每个密钥的权限,即对可以使用密钥的主机的限制,以及密钥可以执行的命令。
  • 强制执行定期 SSH 密钥轮换:SSH 密钥轮换是抛弃现有的 SSH 密钥用户关联,不时部署新密钥对的做法,以应对 SSH 密钥泄露的不幸事件,授权密钥(放置在目标系统上)和身份密钥都需要定期轮换,以避免潜在的权限滥用。
  • 审核所有用户活动并生成预制报告:设置防篡改审核机制,以跟踪涉及 SSH 密钥的所有用户活动并生成分类报告,这将提高所收集数据的敏感性和可读性,并帮助管理员做出明智的业务决策。

Key Manager Plus 是基于Web的SSH密钥和SSL证书管理解决方案,可帮助您从单一管理平台发现、整合、创建、部署、轮换和跟踪SSH密钥。它是一个一体化解决方案,可为 IT 管理员提供对其 SSH 环境的完全可见性和控制,使管理无忧无虑,并帮助他们预防违规和合规性问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/603750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单介绍Java 的内存泄漏

java最明显的一个优势就是它的内存管理机制。你只需简单创建对象,java的垃圾回收机制负责分配和释放内存。然而情况并不像想像的那么简单,因为在Java应用中经常发生内存泄漏。 本教程演示了什么是内存泄漏,为什么会发生内存泄漏以及如何预防…

2、C语言:控制流

控制流 语句:在表达式后面加上分号,构成语句。 程序块:用一对花括号“{”与“}”把一组声明和语句括在一起就构成了一个复合语句。复合语句在语法上等同于单条语句。 if-else语句else-if语句:从上到下依次执行,等同于…

视频云存储/视频智能分析平台EasyCVR在麒麟系统中无法启动该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

【docker】网络模式管理

目录 一、Docker网络实现原理 二、Docker的网络模式 1、host模式 1.1 host模式原理 1.2 host模式实操 2、Container模式 2.2 container模式实操 3、none模式 4、bridger模式 4.1 bridge模式的原理 4.2 bridge实操 5、overlay模式 6、自定义网络模式 6.1 为什么需要…

017、使用包、单元包及模块来管理日渐复杂的项目

在编写较为复杂的项目时,合理地对代码进行组织与管理很重要,因为我们不太可能记住代码中所有的细枝末节。只有按照不同的特性来组织或分割相关功能的代码,我们才能够清晰地找到实现指定功能的代码片段,或确定哪些地方需要修改。 到…

【UML】第14篇 协作图

目录 一、协作图的概述 二、协作图的主要构成 2.1 对象 2.2 消息 2.3 链 三、协作图如何画 3.1 思路 3.2 步骤 这个系列暂停了好几天了,适当时候再恢复一下。 UML非常经典,只要在这个行业,代码可能不会写一辈子,但是图肯定…

Java socket编程学习笔记

一、初步了解 1、简易代码(存在socket提前关闭问题) 服务端代码: import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.nio.charset.StandardCharsets;public class MySocketServer {public static void main(String[] args) throws IOEx…

js判断是否为数字的方法

找到一个比较好用的方法,记录下来,方便以后使用查找 function isNumber(value) {return !isNaN(parseFloat(value)) && isFinite(value); }目前测试情况: isNumber(123) —> true isNumber(12.3) —> true isNumber(-12.3) —…

阿里2面:万亿级消息,如何做存储设计?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、shein 希音、百度、网易的面试资格,小伙伴在面阿里时,遇到了一个存储设计相关的面试题: 存储架构,…

Ubuntu 虚拟机挂接 Windows 目录

Windows 共享目录 首先 Windows 下共享目录 我这里偷懒直接直接 Everyone ,也可以指定用户啥的 Ubuntu 挂接 挂接命令,类似如下: sudo mount -o usernamefananchong,passwordxxxx,uid1000,gid1000,file_mode0644,dir_mode0755,dynperm //…

leetcode09-机器人能否返回原点

题目链接: https://leetcode.cn/problems/robot-return-to-origin/?envTypestudy-plan-v2&envIdprogramming-skills 思路: 循环遍历,模拟即可 代码: class Solution {public boolean judgeCircle(String moves) {int n m…

5.云原生安全之kubesphere应用网关配置域名TLS证书

文章目录 cloudflare配置使用cloudflare托管域名获取cloudflare API Token在cloudflare中配置SSL/TLS kubesphere使用cert-manager申请cloudflare证书安装证书管理器创建Secret资源创建cluster-issuer.yaml创建cert.yaml申请证书已经查看申请状态 部署harbor并配置ingress使用证…

C++中的面向对象重点总结

面向对象的三大特性 封装 封装是将数据和操作这些数据的函数(方法)组合在一个类中的过程。 封装的主要目的是隐藏类的内部实现细节,仅暴露必要的接口给外部,通过控制类成员的访问级别,可以限制对类内部数据的直接访…

【面试】Redis基础知识

题目 为什么Redis是单线程却性能很高? Redis是一个高性能的基于内存的键值存储系统。它之所以能够达到高性能,主要有以下几个原因: 基于内存:Redis将数据存储在内存中,而不是硬盘上,这使得数据的读写速度…

回首2023,期待2024!

2023,在改变中到来 2023年1月1日,我从成都冷清的学校回到了哈尔滨的老家,开始了保研之前的最后一个寒假 当时的目标是将之前的科研理论转化为实际,生产出一篇sci,助力保研加分 星移斗转,事与愿违&#x…

编译ZLMediaKit(win10+msvc2019_x64)

前言 因工作需要,需要ZLMediaKit,为方便抓包分析,最好在windows系统上测试,但使用自己编译的第三方库一直出问题,无法编译通过。本文档记录下win10上的编译过程,供有需要的小伙伴使用 一、需要安装的软件…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)子线程 WorkerThread的实现 和 线程池ThreadPool的初始化

一、子线程 WorkerThread的实现 (1)工作线程 线程ID:每个线程都有一个唯一的ID,用于标识线程的名字:非必需,主要用于识别线程互斥锁:线程同步条件变量:线程阻塞EventLoop:在每个子…

实战环境搭建-linux下安装jdk1.8

查看安装jdk版本信息,主要是怕之前有遗漏的,或者安装失败的java rpm -qa | grep java 显示如下信息: 卸载: rpm -e --nodeps java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64 rpm -e --nodeps java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64 还有一些其他的命令…

工智能基础知识总结--什么是TextCNN

什么是TextCNN Yoon Kim在论文(2014 EMNLP) Convolutional Neural Networks for Sentence Classification提出TextCNN,该模型将卷积神经网络CNN应用到文本分类任务,是卷积神经网络应用到文本分析的开创性工作之⼀。 TextCNN的结构 TextCNN的结构图如下&…

【动态规划】【滑动窗口】C++算法:100154 执行操作后的最大分割数量

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 C算法:滑动窗口总结 动态规划 LeetCode100154 执行操作后的最大分割数量 给你一个下标从 0 开始的字符串 s 和一个整数 k。 你需要执行以下分割操作,直到字符串 s 变为 空&#xf…