为什么 sshd 每个客户端有 2 个进程?

为什么 sshd 每个客户端有 2 个进程?

我正在设置 VPS 服务器,并且习惯于pstree -p在其上运行。我刚刚注意到 sshd 最初似乎只有 1 个服务器进程,然后为该系统上的每个客户端连接添加 2 个(它是一个运行 runit-init 的 debian buster,sshd 脚本由我编写)。为每个连接添加 1 个实例对我来说很有意义,但为什么要添加 2 个呢?

结果pstree -p表明:

runit(1)-+-runsvdir(1303)-+-runsv(1341)-+-busybox(1366)
         |                |             `-svlogd(1365)
         |                |-runsv(1342)-+-sshd(1361)-+-sshd(16288)---sshd(16294)---bash(16295)
         |                |             |            `-sshd(16305)---sshd(16311)---bash(16312)---pstree(16319)
         |                |             `-svlogd(1360)
         |                |-runsv(1343)---getty(1354)
         |                |-runsv(1344)---getty(1353)
         |                |-runsv(1345)---getty(1352)
         |                |-runsv(1346)---getty(1351)
         |                |-runsv(1347)---getty(1349)
         |                |-runsv(1348)---getty(1350)
         |                `-runsv(13966)---runsvdir(14047)---runsv(14048)-+-darkhttpd(15417)
         |                                                                `-svlogd(15291)
         `-systemd-udevd(442)

这是我的 sshd 运行脚本:

. /etc/runit/common
test -e /run/sshd || mkdir /run/sshd
exec /usr/sbin/sshd -D -e

内容/etc/runit/common(仅仅为了完整性,它很空,但我打算稍后添加一些内容):

exec 2>&1
set -xe

我没有异常行为(并且我也知道事情是可以完善的),我只是对事情的原因感到好奇。

答案1

这个问题是跨站点重复的为什么sshd(OpenSSH) 每个连接创建两个进程?回答

权限分离——一个进程保留 root 权限来执行只有 root 才能执行的操作,另一个进程执行其他所有操作。

[…]

确认运行pstree -u

-u:显示 uid 转换;每当进程的 uid 与其父进程的 uid 不同时,新的 uid 就会显示在进程名称后的括号中)。

相关内容