敲得ssh,但真正干活的却是 sshd

来源:本站原创 点击数: 发布时间:2026年05月26日

服务器里执行了:

ps aux | grep ssh

想看一下 ssh 的相关进程,结果看到的,却不是 ssh

而是:

sshd

和:

sshd: root@pts/0

它们只差一个字母。

但职责,却完全相反。

原来 ssh 和 sshd,是 Linux 世界里最经典的一对客户端服务端

一、我们看到的 ssh,只是遥控器

当我们输入:

ssh root@1.2.3.4

本机做的事情是发起连接

ssh 负责的是:

  • 去连接远程服务器
  • 建立加密通道
  • 让你输入密码 / 使用密钥
  • 打开一个终端窗口

它的角色,更像是遥控器。

也就是说 ssh 是客户端,是主动发起连接的一方。

二、服务器里真正工作的,是 sshd

sshd 的全名叫 SSH Daemon(守护进程)

在 Linux 世界里,daemon 的意思是一直在后台运行的服务。

sshd 常年待在服务器里,默默做着这些事:

  • 监听 22 端口
  • 等待别人连接
  • 验证身份(密码 / 密钥)
  • 创建 shell
  • 维持你的会话

也就是说 sshd 才是那个真正干活的人。

三、一次 SSH 登录,真实发生了什么?

假设:

  • 你的电脑:192.168.1.10
  • 服务器:1.2.3.4

当你敲下:

ssh root@1.2.3.4

真实流程是这样的:

你(ssh)   ↓向服务器 22 端口发起连接   ↓服务器上的 sshd 收到请求   ↓sshd 验证你的身份   ↓sshd 创建一个 shell   ↓你拿到远程终端

一些人可能以为是 ssh 自己完成了一切。

但实际上,如果服务器上没有 sshd,你的 ssh 是连不上的。


四、为什么要搞两个程序?

因为它们干的不是同一件事,这是 Unix 的一种分工思维。

Unix 的设计哲学是:

把复杂系统拆成多个小组件,每个组件只做一件事。

所以:

  • ssh → 只负责发起连接
  • sshd → 只负责接受连接

它们分开,各自简单;组合起来,却很强大。
ssh 是我去连接别人sshd 是别人来连接我

或者更直白一点:你看到的是 ssh,但远端服务器里真正干活的是 sshd。