从https://unix.stackexchange.com/a/489913/674
使用 SSH 连接算作登录。
从如何以进程所有者的身份运行进程或在不登录的情况下成为其所有者?
使用SSH连接,不涉及
login
如何sshd
执行登录活动?不是通过调用login
程序来完成的吗?
虽然没有直接显示 ssh,但 APUE 显示了如何工作的图rlogin
,并且还说明
rlogind
我们显示了服务器和登录 shell之间对 exec 的两次调用,因为login
程序通常在两者之间来验证用户。
还要执行登录sshd
吗?exec
login
谢谢。
答案1
您提供的图表与 、rlogin
和其他向用户提供交互式 shell 的基于网络的进程的高级路径几乎相同。telnet
ssh
接受连接的守护进程将执行身份验证。成功后,它将为交互式用户会话分配一个 pty,并创建子(用户)会话来与 pty 对话。然后守护进程处理 pty 和网络之间的通信。
在登录时,守护进程还可以执行其他内务功能(例如更新、lastlogin
审计日志等)。有一个utmp
wtmp
很多执行的后台任务的数量。
sshd
可以通过多种不同的方式进行配置;有一个UseLogin
可用于创建用户会话的参数。默认为“否”
% sudo grep UseLogin /etc/ssh/sshd_config
#UseLogin no
yes
不建议将此设置为(例如在 sshd_config 中使用登录)
答案2
APUE 有点过时,或者它不太适合现代 Linux 用户空间(它仍然是 UNIX,而不是现代 Linux Distro)。
在现代 Linux 发行版上,SSH 服务器通过网络对您进行身份验证并创建会话(通过与会话管理器对话)来登录您。远程会话(如图片的一部分所示)通过登录管理器将您的输入数据从网络套接字转发到 pty master 来工作,因此 shell 可以通过 pty 从设备工作。 Pty 完全是另一个话题。
您的图片真正显示的是旧系统,其中根本没有会话管理器。就像斯蒂芬在另一个答案中所说的那样,这只是形成了完全不同类型的“会话”。
在现代系统中,会话通常都是由会话管理器创建的,这为管理员用户提供了更简单的结构。