news 2026/6/24 5:25:36

一篇文章看懂SSH,TMUX,SCP的原理及使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一篇文章看懂SSH,TMUX,SCP的原理及使用

SSH / Tmux / SCP 全链路详解(服务器内部视角)

一、SSH 登录:远程服务器内部发生了什么?

1️⃣ 常驻监听

远程服务器启动后,系统中常驻一个sshd 主进程

socket(AF_INET, SOCK_STREAM, 0); // 创建 TCP 接口 bind(port=22); // 绑定 22 号端口 listen(); // 持续监听
  • 监听者:sshd(主)

  • 权限:root

  • 职责:只负责“接电话”


2️⃣ 你发起连接:fork 出子进程

当你在本地执行:

ssh user@server

服务器内部:

  1. TCP 三次握手完成

  2. sshd(主)调用:

    fork();
  3. 生成一个sshd(子)

    • 专门服务你这一条连接

    • 主进程继续监听别人


3️⃣ sshd(子) 申请 PTY(伪终端)

sshd(子)Linux 内核申请终端:

open("/dev/ptmx");

内核创建PTY(一对)

名称

作用

PTY Master

网络端(sshd 用它写/读)

PTY Slave

终端端(bash 看到的“假屏幕”)


4️⃣ fork + exec 出 bash

sshd(子)再 fork 一次:

fork(); exec("/bin/bash");

结果:

sshd(子) └── bash ├── stdin → PTY Slave ├── stdout → PTY Slave └── stderr → PTY Slave

5️⃣ 你输入命令时发生了什么?

python train.py

流程:

  1. 本地 SSH client → TCP → sshd(子)

  2. sshd(子) 写入 PTY Master

  3. 内核 → PTY Slave

  4. bash 读到命令

  5. bashfork()exec("python")

  6. python:

    • 使用CPU / 内存

    • 通过CUDA​ 调用GPU

    • 读写远程磁盘

输出原路返回:

python → PTY Slave → PTY Master → sshd(子) → TCP → 本地屏幕

二、断网后:为什么普通 SSH 会死?

1️⃣ 断网瞬间

  • TCP 连接断开

  • sshd(子)发现网络 EOF

  • sshd(子)退出

  • PTY Master 被关闭


2️⃣ 内核发 SIGHUP

内核发现:

“PTY 的控制端(Master)没了”

于是:

  • 会话首进程(bash)​ 发送SIGHUP

  • bash 默认终止

  • bash 向前台进程组(python)转发 SIGHUP

  • python 退出


3️⃣ PTY 被回收

  • bash 关闭 PTY Slave

  • 无人引用 PTY

  • 内核回收 PTY

这就是“一断网,训练全没”的根本原因


三、Tmux:为什么断网后还能活着?

1️⃣ Tmux 做了什么?

你在 SSH 里输入:

tmux new -s train

服务器内部:

  1. bash fork → exec →tmux client

  2. tmux client fork →tmux server

  3. tmux server:

    • systemd/init收养(PPID=1)

    • 不依赖 sshd(子)

  4. tmux server:

    • 自己申请 PTY

    • fork → bash'(tmux 内 bash)

  5. tmux client:

    • 通过Unix Socket​ 连接 tmux server

    • 充当 sshd(子) 与 tmux server 的桥梁


2️⃣ 断网时发生了什么?

组件

命运

sshd(子)

退出

tmux client

退出

tmux server

✅ 活着

tmux PTY

✅ 开着

bash'

✅ 活着

python

✅ 继续跑

因为 tmux server 的父不是 sshd,而是系统 init


四、SCP:为什么不能只用 SSH?

1️⃣ SSH 的局限

SSH 只能:

  • 执行远程命令

  • 传输终端 IO

不能把本地文件“变”到远程磁盘


2️⃣ SCP 的原理

SCP 本质是:

基于 SSH 加密通道的“文件复制工具”

执行:

scp train.py user@server:/home/user/

内部流程:

  1. 本地 scp:

    • 打开train.py

    • 读文件内容

  2. 通过 SSH 通道发送

  3. 远程 sshd:

    • 启动临时 scp 进程

    • 把数据写成/home/user/train.py

👉SCP 传的是“文件数据”,不是命令


3️⃣ SSH vs SCP 一句话区别

工具

传什么

用途

SSH

命令字符

远程执行

SCP

文件内容

远程存文件

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 5:22:50

【测试方案_MDIO】快速掌握以太网PHY MDIO测试

目录 1. MDIO概述 2. MDIO工作原理 2.1. MDIO引脚定义 2.2. MDIO协议 2.2.1. MDIO读写区分 2.2.2. MDIO帧结构 2.2.2.1. Clause-22帧结构 2.2.2.2. Clause-45帧结构 2.2.3. MDIO读写时序 2.2.3.1. 写操作时序(WRITE OP=01) 2.2.3.2. 读操作时序(READ OP=10) 2.2.…

作者头像 李华
网站建设 2026/6/24 5:21:27

Web渗透测试实战:SQL注入漏洞从入门到深度防御

# Web渗透测试实战:SQL注入漏洞从入门到深度防御## 1 SQL注入攻击概述SQL注入(SQL Injection)是Web安全领域最经典的漏洞之一,连续多年位列OWASP Top 10高危漏洞。攻击者通过构造恶意SQL语句,插入应用程序的输入参数&a…

作者头像 李华
网站建设 2026/6/24 5:20:32

SSH MCP Server 详解:让 AI 安全地“握紧”你的服务器

一、项目概述 ssh-mcp-server 是一个基于 SSH 的 Model Context Protocol (MCP) 服务端实现,由开发者 classfang(方俊杰)开源维护。它充当了 AI 助手与远程服务器之间的安全桥梁,让支持 MCP 协议的客户端(如 Claude C…

作者头像 李华
网站建设 2026/6/24 5:13:17

智能内容审核系统:从关键词匹配到上下文理解与意图判别

1. 项目概述:当“回收”遇上“多元态度”,内容审核的十字路口最近在和一些做社区运营、风控的朋友聊天,大家不约而同地提到了一个越来越棘手的难题:那些曾经被平台明令禁止的、带有明显侮辱或歧视色彩的“污名化语言”&#xff0c…

作者头像 李华
网站建设 2026/6/24 5:08:09

基于生物力学与隐私计算的唇语深度伪造检测技术解析

1. 项目概述:当“眼见”不再“为实”,我们如何守护真实?最近几年,深度伪造技术(Deepfake)的“进化”速度,已经远远超出了普通人的想象。从早期的换脸视频,到如今能够精准操控口型、表…

作者头像 李华
网站建设 2026/6/24 5:07:43

全同态加密神经网络推理优化:从理论到高吞吐量工程实践

1. 项目概述:当隐私计算遇上AI推理最近几年,数据隐私和AI模型推理的结合点,成了我们这些搞系统优化和密码学应用的人特别关注的领域。你肯定遇到过这种场景:一家医院想用顶尖的AI模型分析患者的医疗影像,但数据涉及高度…

作者头像 李华