如何查看用户是否通过 sftp 登录?

aVe*_*RAC 11 linux ssh sftp

我为我的办公室运行一个 linux 文件服务器,我们使用 SFTP 为远程合作伙伴登录和下载文件。有没有办法查看是否有任何活动连接或登录,以便我知道何时可以安全地对机器进行维护?

由于机器几乎不断地提供大文件,定期维护经常因有人上传

Ric*_*lka 13

你也可以这样做:

ps -ef | grep '[s]shd' | grep -v ^root
Run Code Online (Sandbox Code Playgroud)

它应该显示任何 sshd 会话(用于 sftp)。我注意到在我的机器上我的 sshd 进程命令行包含“$USER@notty”,这是有道理的,因为我没有使用终端会话登录。您可以使用以下方法收紧 grep:

ps -ef | grep '[s]shd:.*@notty' | grep -v ^root
Run Code Online (Sandbox Code Playgroud)

顺便说一句: grep 中的方括号不会在进程列表中显示“grep sshd”进程。[s]shd 匹配 sshd,但不匹配自身。它保存了一个“grep -v grep”

  • 我最终使用了`netstat -atn | grep ':22'` 以查看端口 22 上是否有开放流量。我还发现我可以检查位于系统上的 '/var/log/auth.log' 的 sshd 日志,以查看是否所有拥有打开一个会话已经被关闭了。 (4认同)

Jam*_*ell 1

我认为你可以使用命令行程序who来查看这一点。我注意到一些报告表明这样做不起作用,但我仍然认为它可能有效(也许这是一个 ssh 设置)。

sftp 构建在 SSH 之上。它代表“SSH 文件传输协议”。当您通过 ssh 登录时,“who”将在其输出中将您作为登录用户包括在内。所以我希望这也适用于活动的 sftp 会话。

2008 年的讨论还建议您可以使用“netstat”来实现此目的。它还包括通过“watch”运行“who”的建议,以便您无需执行任何操作即可查看更新。

  • who 显示谁当前正在运行登录 shell。根据用户正在运行的内容,它可能会也可能不会被视为登录 shell。 sftp 的服务器部分没有,因此 sftp 会话不会出现在 who 中。 (2认同)