为什么运行 sudo systemctl stop ssh over ssh 不会立即终止 ssh 会话

为什么运行 sudo systemctl stop ssh over ssh 不会立即终止 ssh 会话

这个问题源于好奇,但假设我当前与远程计算机有一个 ssh 会话,并且我运行以下命令:

sudo systemctl stop ssh

运行后:

systemctl status ssh

为了验证服务的状态,它似乎处于非活动状态(死亡),为什么我仍然能够远程执行任何命令?

再说一遍,这不是一个正式的问题,我只是好奇

感谢您的时间

答案1

当您连接时,SSH 守护进程(例如sshd)至少分叉一次。从现在开始,您的连接将由单独的进程处理,而不是监听守护进程本身。

systemctl stop ssh停止监听守护进程,因此无法建立新的 SSH 连接。现有连接之所以能够生存,是因为分叉进程能够生存。

这是以下示例片段pstree -u

systemd-+-…
        |-sshd---sshd---sshd(kamil)---bash---…

第一个sshd是以 root 身份运行的守护进程。第二个是一个分叉的提升进程,仍然保留 root 的权力。第三个已经失去了root的力量,它属于我(卡米尔)。停止(杀死)守护进程不会影响其他两个(是的,我已经测试过)。

相关内容