这个问题源于好奇,但假设我当前与远程计算机有一个 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的力量,它属于我(卡米尔)。停止(杀死)守护进程不会影响其他两个(是的,我已经测试过)。