尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

本地客户端ssh连接远程服务器,远程服务器的ssh进程都做了哪些工作?

本地客户端ssh连接远程服务器,远程服务器的ssh进程都做了哪些工作?
📅 发布时间:2026/6/19 16:49:19

服务端的 sshd 进程在处理一个 SSH 连接时,工作非常复杂和精密。我们可以将其工作流程分为几个关键阶段。

整体工作流程概览

  1. 连接建立与协议协商
  2. 用户认证
  3. 通道与会话管理
  4. 伪终端与 Shell 启动
  5. 数据中继与生命周期管理

下面我们来详细拆解每个阶段。


阶段一:连接建立与协议协商

  1. 监听连接:sshd 守护进程在后台持续运行,监听默认的 22 端口(或配置的其它端口)。
  2. 接受 TCP 连接:当客户端发起连接,主 sshd 进程会接受这个 TCP 连接。
  3. 协议版本交换:双方交换标识字符串,例如 SSH-2.0-OpenSSH_8.2p1,以确定使用 SSH-1 还是 SSH-2 协议(现代系统基本都用 SSH-2)。
  4. 密钥交换与加密层建立:
    • 使用 Diffie-Hellman 等算法协商一个临时的、唯一的会话密钥。这个密钥本身不会在网络上传输。
    • 基于会话密钥,生成后续通信使用的加密密钥和完整性验证密钥。
    • 协商双方支持的加密算法(如 AES-CTR)、MAC 算法等。
    • 从此之后,所有的通信都被加密和完整性保护。

阶段二:用户认证

在安全的加密通道建立后,服务器需要验证客户端的身份。

  1. 客户端发起认证请求:客户端声明要使用哪个用户名进行认证。
  2. 认证方法协商:服务器根据配置(/etc/ssh/sshd_config)和客户端能力,按顺序尝试不同的认证方法。常见的有:
    • 公钥认证:最常用的方式。服务端检查用户家目录下的 ~/.ssh/authorized_keys 文件,看是否存在客户端提供的公钥。如果存在,服务端会生成一个随机挑战,用该公钥加密,发送给客户端。客户端必须用对应的私钥解密并回应,才能证明自己的身份。
    • 密码认证:服务端要求客户端提供用户的登录密码,并通过系统的 PAM 或直接 shadow 文件来验证密码。
    • 键盘交互认证:用于双因素认证等场景,服务端可以发送一系列提示(如密码 + 验证码),客户端依次回答。
  3. 认证成功:一旦任何一种认证方法成功,用户即被视为已登录。

阶段三:通道与会话管理

SSH 协议是分层的。在加密连接内部,可以创建多个独立的逻辑“通道”。

  1. 通道请求:认证成功后,客户端会发送一个 session 通道请求。这相当于在 SSH 连接内部开辟了一个独立的对话线路。
  2. 处理客户端请求:在 session 通道内,客户端可以发起不同类型的请求,服务端 sshd 需要处理这些请求:
    • pty-req:请求分配一个伪终端。
    • shell:请求启动一个默认的 Shell。
    • exec:请求执行一个特定的命令。
    • subsystem:请求启动一个子系统,最典型的是 sftp。

阶段四:伪终端与 Shell 启动(核心环节)

当客户端请求一个交互式 Shell 时(这是最常见的情况),服务端 sshd 会进行我们在上一个问题中讨论的伪终端创建工作。

  1. 创建伪终端:
    • sshd 进程(的子进程)调用 posix_openpt() 等函数,打开主设备。
    • 操作系统解锁并返回一个对应的从设备路径,如 /dev/pts/2。
  2. 启动用户进程:
    • sshd 通过 fork() 创建一个子进程。
    • 在该子进程中,它可能会调用 setuid() 切换到登录用户的身份。
    • 然后它打开从设备,并将其复制到新进程的标准输入、标准输出和标准错误文件描述符上。
    • 最后,通过 exec() 系列函数启动用户配置的 Shell(如 /bin/bash)。
  3. Shell 的错觉:现在,Shell 认为自己连接到了一个真实的终端(/dev/pts/2),并正常地从“键盘”读取输入,向“屏幕”输出结果。

阶段五:数据中继与生命周期管理

这是 sshd 进程持续进行的工作,也是其核心职责。

  1. 数据泵:
    • 输入方向:sshd 从加密的 TCP 套接字中读取客户端发送的按键数据,将其解密后,写入伪终端的主设备。这些数据随后会被 Shell 从从设备读取。
    • 输出方向:sshd 同时监听伪终端的主设备,等待 Shell 有输出。一旦有输出,它就从主设备读取数据,加密后,通过 TCP 套接字发送给客户端。
  2. 信号和窗口大小转发:
    • 当你在客户端按下 Ctrl+C 时,客户端不会发送字符 ^C,而是会通过一个特殊的消息告诉服务器“请发送 SIGINT 信号”。
    • sshd 收到这个消息后,会向 Shell 进程组发送 SIGINT 信号。
    • 同样,当你调整终端窗口大小时,客户端会通知服务器,sshd 则使用 ioctl() 系统调用调整伪终端的大小,Shell 和其下的程序(如 vim)就能感知到变化。
  3. 连接保活与超时管理:sshd 会监控连接状态,处理客户端超时或无响应的情况,并根据配置断开连接。
  4. 清理工作:当连接断开(客户端退出或网络中断),sshd 会:
    • 向 Shell 及其所有子进程发送 SIGHUP 信号,终止它们。
    • 关闭伪终端。
    • 释放所有资源,退出处理这个连接的子进程。

总结

服务端的 sshd 进程扮演了一个超级中介的角色,它的核心工作包括:

  • 密码学家:负责建立安全的加密通道。
  • 门卫:严格验证用户的身份。
  • 制片人:为用户的 Shell“搭建舞台”——创建伪终端。
  • 翻译官:在加密的网络数据流和明文的终端数据流之间进行转换和中继。
  • 信使:在客户端和 Shell 进程之间转发信号和控制信息。
  • 清洁工:在会话结束时,负责清理现场。

正是通过这一系列复杂而精密的协作,才使得我们能够安全、稳定地从远程操作一台服务器,感觉就像坐在它的本地终端前一样。

相关新闻

  • yolo简单使用
  • 2025年管母线厂家权威推荐:绝缘铝管母线/管型母线/全屏蔽绝缘铜管母线源头厂家精选
  • GaussDB 数据操作

最新新闻

  • 20260619 了解V8规则
  • 2026 年 6 月最新无锡同城购宠评分榜实测|7 家正规猫舍犬舍横向测评,附近实体门店避坑全攻略 - 吉林同城获客
  • 广州租办公室哪里好?万博德舜大厦A塔居首,2026年6月四大商务区深度横评 - 速递信息
  • 嵌入式GUI开发:emWin LISTVIEW控件从入门到精通
  • 2026深圳龙岗宝安龙华黄金回收实测 多轮对比实测优选 - 逸程
  • 2026上海钻石回收7家机构对比测评 本土标杆机构推荐 - 薛定谔的梨花猫

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号