年初,新冠肺炎疫情的出现,全国数千万名员工在家远程办公,使用个人设备通过家庭网络访问公司资料。因此,IT 安全团队面临了众多新挑战:如何实施更加安全的身份验证方案,以确保只有授权人员和设备才能访问公司敏感资产?

不少小伙伴想起了 SSH,其实大家对它都比较熟悉。大到虚拟机、服务器,小到手机、家电,Linux 设备普及越来越广,SSH 的运用也越来越广泛。不仅攻城狮、程序猿离不开它,普通用户也基本都在使用。SSH 可以说是各服务器的标配,有了 SSH,我们不必每次都要蹲到机房里连接服务器配置服务器,直接远程就可以操作,同样,有了 SSH,也能解决远程办公的一些安全性问题。

下面我们就来详细了解一下 SSH 的传奇故事。

什么是 SSH

SSH(Secure Shell)是一种加密的网络传输协议,它允许用户通过 Internet 控制和修改远程服务器。该协议的出现替代了未加密的登录协议(例如 telnet/rlogin)和不安全的文件传输方法(例如 FTP),并使用了加密技术来确保与远程服务器之间的所有通信都以加密的方式进行。它提供了一种机制,用于验证远程用户,将输入从客户端传输到服务器,以及将输出中继回客户端。

SSH 提供了强大的加密和完整性保护。在客户端和服务器之间建立连接后,SSH 将根据设置中协商的参数对传输的数据进行加密。在协商过程中,客户端和服务器根据使用的对称加密算法达成一致,并生成将要使用的加密密钥。通讯双方之间的通信受到行业标准的强加密算法(例如 AES(高级加密标准))的保护,并且 SSH 协议还包括一种机制,该机制通过使用标准哈希算法(例如 SHA)来确保传输数据的完整性。

SSH 除了提供强大的加密功能外,网络管理员还广泛使用 SSH 远程管理系统和应用程序,交付软件补丁或执行命令并移动文件。

SSH 协议如何工作

任何 Linux 或 macOS 用户都可以直接从终端窗口通过 SSH 进入其他远程服务器。而 Windows 用户可以利用 Xshell、Putty 之类的 SSH 客户端。进入之后就可以与直接操作远程计算机相同的方式执行 Shell 命令。

SSH 默认在 TCP 端口 22 上运行(可以根据需求修改)。服务器在 22 端口上监听传入的连接。如果验证成功,它将对客户端进行身份验证并打开正确的通道来进行安全连接。客户端必须通过与服务器启动 TCP 握手,确保安全的对称连接,验证服务器显示的身份是否与以前的记录(通常记录在 RSA 密钥存储文件中)匹配,并提供所需的用户凭据来开始 SSH 连接。

服务器(主机)身份验证

SSH 协议内置于 Unix 和 Linux 服务器中,以实现系统之间的安全连接。该连接由请求连接到 SSH 服务器的客户端建立。SSH 客户端启动连接建立过程,并使用公共密钥加密技术来验证 SSH 服务器的身份。在设置阶段之后,SSH 协议使用强大的对称加密和哈希算法来确保客户端和服务器之间交换数据的私密性和完整性。

下图是根据 NIST IR 7966 改编而成的,它简化了 SSH 连接的流程:

  • 客户端启动与 SSH 服务器的连接

  • 服务器将其公钥发送给客户端

  • 服务器的公钥保存在客户端的已知主机文件中

  • 客户端与服务器协商连接参数并建立连接

客户端(用户)身份验证

SSH 协议使用传统密码或公共密钥来启用客户端身份验证。但是,鉴于使用密码的风险和效率低下,公钥身份验证被更广泛地使用。SSH 密钥不仅比密码更强大,而且系统管理员还可以绕过基于密码的手动登录。

用户如何使用 SSH 密钥进行身份验证呢?它们可以使用 ssh-keygen 命令与 SSH 客户端(例如 OpenSSH)生成一个公私钥对。创建后,用户将其授权密钥(公共密钥)放入需要连接的服务器上的 authorized_keys 文件中。

当用户使用基于密钥的身份验证远程登录时,OpenSSH 服务器将查找授权密钥,然后用户使用其对应的私钥向服务器进行身份验证。由于不需要手动身份验证,因此通常使用基于密钥的身份验证用于 IT 流程的自动化,例如安全的文件传输,备份和复制流程或配置管理工具(例如 Ansible,Terraform,Chef 或 Puppet) 。

SSH 协议的常见用例

SSH 连接主要用于保护本地计算机和远程主机之间不同类型的通信,包括:

  • 安全远程访问资源

  • 远程执行命令

  • 交付软件补丁和更新

  • 交互式和自动文件传输

除了在本地计算机和远程计算机之间创建安全通道外,SSH 协议还用于管理重要的公司基础结构,例如路由器,服务器硬件,虚拟化平台和操作系统等。

SSH 密钥用于自动访问服务器,通常用于脚本,备份系统和配置管理工具中。由于其设计允许跨组织边界的连接,并且 SSH 密钥提供了单点登录(SSO)功能,使用户无需每次输入密码即可在各个帐户之间移动。

最后,插播段小广告:又拍云的“一键登录”功能,和 SSH 密钥登录类似,用户仅需要允许服务商应用获取本机手机号码,并通过运营商网络上传,即可完成用户身份校验。不需要频繁的输入密码和手机验证码,很大程度上降低了注册、登录环节的用户流失。

服务器标配 SSH 协议,你了解多少?相关推荐

  1. cmd下载远程linux的文件,Java利用ssh协议实现从远程Linux服务器下载文件和文件夹...

    近来应需求需要,做了服务器之间的文件传输,利用的ssh协议.查阅各种资料博客,基本都是下载文件的方法,找不到下载文件夹得方法.思索多日写了一个下载文件夹的简单方法,可能步骤繁琐,优化不大好.由于jsc ...

  2. Ssh协议绑定Git服务器

    1.起因 在公司开发一般使用gitlab部署公司git代码管理,个人的代码存储在公司gitlab上就显得不合时宜了,所以找了gitee上来存储代码. 2.经过 搜索了下github.com,gitee ...

  3. Linux之SSH协议知识点总结

    最近在写自动化测试用例的时候经常会用python语言去实现文件的上传下载功能,这里主要用到的就是SSH协议.为了更好的理解SSH协议,我就翻看了手头的书,回顾SSH的相关知识点,今天就把它总结下,希望 ...

  4. Java 实现 SSH 协议的客户端登录认证方式

    摘自:http://blog.sae.sina.com.cn/archives/333/comment-page-1#comment-37391 简介: 本文首先对 SSH 协议的基础知识作以介绍,然 ...

  5. 买个服务器来挂协议,云服务器代挂协议在哪

    云服务器代挂协议在哪 内容精选 换一换 本节为您介绍如何在本机使用远程登录工具MSTSC登录Windows弹性云服务器.弹性云服务器状态为"运行中".如果弹性云服务器采用密钥方式鉴 ...

  6. 使用Telnet与ssh协议远程登录linux系统

    一.计算机的登录 计算机终端设备通过输入用户账户标识和与之对应的口令的方式被计算机验证的过程. 终端的分类: 1)物理终端:计算机本身的控制台设备:通常将其标识为"pty",在现代 ...

  7. Java 实现 SSH 协议的客户端登录认证方式--转载

    背景 在开篇之前,让我们先对 SSH 协议有个宏观的大致了解,这样更有利于我们对本文的加深了解.首先要提到的就是计算机网络协议,所谓计算机网络协议,简单的说就是定义了一套标准和规则,使得不同计算机之间 ...

  8. 操作系统:SSH协议知识介绍

    今天给大家分享SSH协议相关的知识介绍,希望对大家能有所帮助! 1.SSH协议概念介绍 SSH(Secure Shell)安全外壳协议,是一种建立在应用层基础上的安全协议,通过对密码进行加密传输验证, ...

  9. Linux学习总结(23)——SSH协议详解

    OpenSSH 一. 前言 使用SSH可以在本地主机和远程服务器之间进行加密地传输数据,实现数据的安全.而OpenSSH是SSH协议的免费开源实现,它采用安全.加密的网络连接工具代替了telnet.f ...

最新文章

  1. ## Spark学习之路(一)
  2. http://www.cnblogs.com/dolphin0520/p/3949310.html
  3. 北斗导航 | Matlab实现GNSS接收机经纬度数据(NMEA语句)实时获取和地图绘制(Matlab源代码)
  4. intValue()的用法
  5. generator 中 调用另一个 generator
  6. python网络爬虫系列(七)——selenium的介绍 selenium定位获取标签对象并提取数据 selenium的其它使用方法
  7. leetcode 144 --- 二叉树前序遍历
  8. linux日常学习笔记
  9. 今日头条最新视频解析方法
  10. 阿龙学堂-Java手机号码归属地查询
  11. java 解析umd文件_Javascript模块化编程之CommonJS,AMD,CMD,UMD模块加载规范详解
  12. 拼多多校招内推编程题2 大整数乘法
  13. 腾讯云直播代码 java_JAVA 对接腾讯云直播的实现
  14. STM32-SWD仿真时PB3,PB4,PA15使用问题
  15. sort() 函数的用法
  16. Kotlin学习(一):Kotlin基础知识
  17. mysql rollback作用_innodb_rollback_on_timeout的作用
  18. 数字信号处理知识点总结(二):傅里叶级数与变换
  19. java基础:运行、注释、标识符、数据类型、运算法则
  20. 什么TDD,让它见鬼去吧!

热门文章

  1. break和continue-break代码演练
  2. 边缘计算架构_更灵活的自动化系统架构、通信和编程——在自动化领域部署边缘计算...
  3. servlet destroy 示例_KET答题卡怎么填写?2020年KET答题卡填涂示例
  4. 简易 IM 双向通信电脑端 GUI 应用——基于 Netty、WebSocket、JavaFX 、多线程技术等
  5. LocalDateTime 的常用操作
  6. Trustdata:映客直播站稳行业第一梯队 用户粘性增长明显
  7. [DeeplearningAI笔记]卷积神经网络2.9-2.10迁移学习与数据增强
  8. 黑客攻击澳大利亚政府网站 抗议互联网过滤器
  9. CodeForces - 1370E Binary Subsequence Rotation(思维)
  10. 牛客 - 斐波那契和(杜教BM)