• Linux终端与SSH


    1. 终端

    当在我们需要操作服务器时要接上显示器和键盘,在键盘上输入、可以在显示器上看到。

    我们把 显示器、键盘、鼠标等这些统称为 输入、输出的终端设备,或者把显示器和键盘这些统称作 终端

    在这里插入图片描述

    当我们通过终端设备连接到服务器上并打开这些设备(如显示器)之后

    以Linux系统为例将会启动login进程,这个进程用于用户认证,创建会话,login进程从我们的键盘接收内容,作为它的程序输入,而login进程通过标准输出把提示信息输出到显示器上,我们便可以进行交互。

    当输入了用户名和密码后便能进入到操作系统。

    在这里插入图片描述
    在完成登录操作后,login进程将会启动/bin/bash/bin/sh进程,也就是我们常说的Shell

    用户通过Shell程序就可以和操作系统交互,完成需要的任务。

    Shell程序同样也是使用 标准的输入输出设备(终端) 来与用户交互,例如键盘和显示器,这样我们采用够通过键盘输入命令,在显示器上查看我们输入的内容以及命令运行的结果。

    在进入shell 后我们可以通过 ps命令看到当前正在运行的进程,其中之一就是bash,终端设备为tty1,它的后方也就是物理的终端设备(键盘、显示器)。

    在这里插入图片描述

    通过 显示器 和 键盘 直接使用Linux系统的流程如下:

    在这里插入图片描述

    但是平时我们不会这样做,通常情况下都是在服务器上插上网线,然后使用ssh客户端通过网络远程连接并操作Linux操作系统。

    2. SSH 与 伪终端

    2.1 什么是SSH?

    SSH是一个较为广泛的概念

    • 他可以指 Secure Shell (SSH)协议
    • 也可以指 ssh 客户端/服务端

    SSH客户端/服务端是通过 SSH协议进行通信的程序。

    在这里插入图片描述

    SSH协议栈
    在这里插入图片描述

    RFC标准将SSH架构分成三部分(如上图所示):传输层协议,用户认证协议,连接协议.

    • 传输层协议SSH Transport Layer Protocol: 它负责认证服务器,加密数据,确保数据完整性, 虽然它运行在TCP之上,但其实它可以运行在任意可靠的数据流之上;
    • 用户认证协议SSH User Authentication Protocol: 它负责认证使用者是否是ssh服务器的用户, Public Key Authentication登陆ssh就将在这一层实现;
    • 连接协议SSH Connection Protocol: 它将把多路(Multiplex)加密的通道转换成逻辑上的Channel.

    为了方便区分,这里把 SSH (大写)作为SSH协议,ssh (小写)作为客户端或服务端。

    那我们是怎么通过ssh客户端与Linux服务器进行交互的呢?

    这个就需要提到 伪终端

    我们上文说用户通过鼠标键盘这些终端设备来操作系统,但是ssh服务端为运行于操作系统内一个软件,他并没有硬件,它是怎么完成输入输出,并把这些输入输出传回我们的ssh客户端的呢。

    • 通过 伪终端实现输入输出。
    • 通过 网络 和 SSH协议完成数据从服务端到客户端的传输。

    2.2 什么是伪终端?

    简单来说就是 操作系统提供虚拟的终端程序,可以对伪终端程序的输入输出、作为对操作系统的输入和输出。

    它的结构如下:
    在这里插入图片描述

    [2] 通过man pts可以查阅linux对伪终端的介绍。伪终端是伪终端master和伪终端slave(终端设备文件)这一对字符设备。/dev/ptmx是用于创建一对master、slave的文件。当一个进程打开它时,获得了一个master的文件描述符(file descriptor),同时在/dev/pts下创建了一个slave设备文件。

    master端是更接近用户显示器、键盘的一端,slave端是在虚拟终端上运行的CLI(Command Line Interface,命令行接口)程序。Linux的伪终端驱动程序,会把“master端(如键盘)写入的数据”转发给slave端供程序输入,把“程序写入slave端的数据”转发给master端供(显示器驱动等)读取。

    • 伪终端总是成对存在
    • master 负责 接收物理设备 或 其他进程的输入输出,并发输入输入作为 slave的输入输出
    • slave负责 与 操作系统上的具体进程交互,例如Shell程序 bash/sh 或者其他程序如 login等,它将来自于master的输入和输入作为程序的标准输入和输出,输入到目标程序中。
    • 对于slave的目标进程来说(bash) slave对它来说就和一个真实的终端一样。

    平时我们只需要把 伪终端 看成黑盒,明白它可以吧输入输出转发到作为标准输入输出(stdin/stdout/stderr)目标程序即可。

    2.3 ssh使用Linux

    我们是怎么通过ssh客户端连接上服务端并操作的呢?

    在这里插入图片描述

    1. ssh客户端 与 ssh 服务端 通过 SSH 协议建立连接
    2. ssh客户端 与 ssh 服务端 通过 SSH 协议进行身份认证
    3. ssh 服务端 伪终端 启动 shell程序
    4. ssh 服务端 通过SSH协议将来自伪终端的输入输出 传输至 ssh客户端

    参考文献

    [1]. 博客园 . Linux 终端(TTY) . sparkdev . 2019.09 . https://www.cnblogs.com/sparkdev/p/11460821.html

    [2]. 博客园 . Linux 的伪终端的基本原理 及其在远程登录(SSH,telnet等)中的应用 . Pt Blog . 2017.09 . https://www.cnblogs.com/zzdyyy/p/7538077.html

    [3]. Go进阶52:开发扩展SSH的使用领域和功能 . neochau . https://mojotv.cn/golang/ssh-pty-im

    [4]. linux man . 2020-08 . https://man7.org/linux/man-pages/man4/pts.4.html

  • 相关阅读:
    c语言实现面向对象编程(const * ,* const)
    【HTTPS】HTTPS解决了什么问题、HTTPS的加密过程和方式、SSL/TLS、中间人攻击等重点知识汇总
    张量-算术操作函数
    dds:subscribe:DataReader
    Tableau 自定义调色板及应用全流程讲解【保姆级】
    【Python基础-Pandas】解决Pandas会自动把None转成NaN的问题
    Win11系统更新KB5014668后点开始按钮没反应怎么办?
    【Webpack】提升打包构建速度
    弹簧(压簧)力度计算与设计
    Sim3相似变换
  • 原文地址:https://blog.csdn.net/q1009020096/article/details/126054947