![为什么运行 sudo systemctl stop ssh over ssh 不会立即终止 ssh 会话](https://linux22.com/image/205966/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%90%E8%A1%8C%20sudo%20systemctl%20stop%20ssh%20over%20ssh%20%E4%B8%8D%E4%BC%9A%E7%AB%8B%E5%8D%B3%E7%BB%88%E6%AD%A2%20ssh%20%E4%BC%9A%E8%AF%9D.png)
这个问题源于好奇,但假设我当前与远程计算机有一个 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的力量,它属于我(卡米尔)。停止(杀死)守护进程不会影响其他两个(是的,我已经测试过)。