即使 Linux ubuntu 上的服务停止,Linux ssh(错误/损坏)仍然可以工作?

即使 Linux ubuntu 上的服务停止,Linux ssh(错误/损坏)仍然可以工作?

这是整个场景:

  1. 安装 ssh apt-get install ssh
  2. 创建了一个新用户(我知道我不必这样做)
  3. 使用新用户通过 ssh 登录系统
  4. 修改/etc/ssh/sshd_config以允许root登录
  5. 发出命令 systemctl status ssh
  6. 它显示服务正在运行
  7. 发出 systemctl stop ssh (我知道我可以使用 service cmd)
  8. 我仍然通过 ssh 登录!不知道这是如何运作的
  9. 打开一个新的 putty 实例并尝试连接,它说服务无法访问/超时
  10. 发出 systemctl start ssh 并尝试使用新的 putty 实例以用户身份登录,并且成功

我想知道为什么它没有拆除第一个实例(新用户通过 ssh 登录)?是因为当我最初登录时,ssh 接受了端口 22 上的连接并打开了一个新的 Web 套接字端口(多线程)并将我的连接分配给该端口,并且正在侦听端口 22 上的另一个连接,当我登录时停止服务后它说超时?

我确信 ssh 不会跟踪它打开的随机端口,你会说这可能是一个错误(没有损坏)。 C 程序不应该也跟踪 ssh 并在 ssh 服务停止时删除实例吗?有什么想法吗?

答案1

这是故意的。当您使用 SSH 连接到系统时,目标系统上的守护进程会生成一个新sshd进程,甚至两个进程(一个以 运行root,另一个以目标用户运行)。 SSH 会话是由这个新进程处理的,而不是原来的进程。从联机帮助页:

sshd监听来自客户端的连接。它通常在引导时启动/etc/init.d/ssh(或 /etc/init/ssh.conf在使用 Upstart init 守护进程的系统上)。它为每个传入连接创建一个新的守护进程。分叉的守护进程处理密钥交换、加密、身份验证、命令执行和数据交换。

当您停止服务时,只有主守护进程停止;管理会话的守护进程继续运行。这使您能够在不丢失会话的情况下重新启动 SSH 服务器 - 当您配置错误且服务器无法重新启动时,这尤其方便......

相关内容