这是整个场景:
我想知道为什么它没有拆除第一个实例(新用户通过 ssh 登录)?是不是因为当我最初登录时,ssh 接受了端口 22 上的连接并打开了一个新的 Web 套接字端口(多线程)并将我的连接分配给了该端口,并且正在侦听端口 22 上的另一个连接,当我登录时停止服务后,它说超时?
我敢肯定 ssh 不会跟踪它打开的随机端口,您会说它可能是一个错误(未损坏)。c 程序不应该也跟踪 ssh 并在 ssh 服务停止时删除实例。有什么想法吗?
这是故意的。当您使用 SSH 连接到系统时,目标系统上的守护进程会生成一个新sshd进程,甚至两个(一个作为 运行root,另一个作为目标用户运行)。SSH 会话由这个新进程处理,而不是原始进程。从联机帮助页:
sshd侦听来自客户端的连接。它通常在启动时启动/etc/init.d/ssh(或/etc/init/ssh.conf在使用 Upstart init 守护进程的系统上)。它为每个传入连接派生一个新的守护进程。分叉守护进程处理密钥交换、加密、身份验证、命令执行和数据交换。
当你停止服务时,只有主守护进程停止;管理会话的守护进程继续运行。这使您能够在不丢失会话的情况下重新启动 SSH 服务器 - 当您配置错误并且服务器没有重新启动时,这特别方便......