目录
目录X
敲得ssh,但真正干活的却是 sshd
AI摘要(BLUF)
SSH(Secure Shell)和SSHD是Linux系统中一对核心的客户端与服务端程序。SSH用于客户端连接远程服务器,而SSHD则是服务器端守护进程,负责监听和处理SSH连接请求。当在服务器上执行ps aux | grep ssh命令时,会看到sshd进程,这是服务器端的SSH守护进程,它负责建立安全的远程连接。sshd: root@pts/0的显示表示root用户通过终端pts/0连接到服务器。两者职责相反但相互配合,共同实现安全的远程登录和文件传输功能。SSH协议通过加密技术确保网络通信的安全性,是Linux系统管理和远程运维的重要工具。在实际使用中,用户通过SSH客户端连接到运行着SSHD服务的服务器,实现安全的远程访问。理解这两个程序的区别和关系,对于Linux系统管理和网络安全具有重要意义。
服务器里执行了:
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。