如何将 lsof 与 SSH ControlPath 一起使用?

如何将 lsof 与 SSH ControlPath 一起使用?

我大量使用 SSH ControlPath,并希望使用该lsof工具来检查哪个进程正在保持 ControlPath 套接字正常运行。我使用的OpenSSH_7.2p2 Ubuntu-4ubuntu1, OpenSSL 1.0.2g-fips 1 Mar 2016是 Ubuntu 16.04 自带的。我的 SSH 选项(在 ~/.ssh/config 中)如下:

Host *
...
  ControlMaster auto
  ControlPath /tmp/sshcontrol-%C
  ControlPersist yes
...

这是我第一次连接主机时得到的结果:

srw------- 1 enzo enzo  0 2016-06-15 11:35:15 sshcontrol-e10fedd3d8237e382300367ff49267fa193957ac

但如果我尝试使用该套接字获取有关该进程的详细信息,lsof我会得到这些“奇怪的“ 结果。

    $ lsof /tmp/sshcontrol-e10fedd3d8237e382300367ff49267fa193957ac
    lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing
          Output information may be incomplete.
    $ sudo lsof /tmp/sshcontrol-e10fedd3d8237e382300367ff49267fa193957ac
    $ lsof | grep sshcontrol-e10fedd3d8237e382300367ff49267fa193957ac
    lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing
          Output information may be incomplete.
    ssh       2044            enzo    4u     unix 0x0000000000000000       0t0      42942 /tmp/sshcontrol-e10fedd3d8237e382300367ff49267fa193957ac.tBKTDPNcaBZjlV2T type=STREAM
    ssh       2044            enzo    5u     unix 0x0000000000000000       0t0      55186 /tmp/sshcontrol-e10fedd3d8237e382300367ff49267fa193957ac.tBKTDPNcaBZjlV2T type=STREAM
    $ lsof /tmp/sshcontrol-e10fedd3d8237e382300367ff49267fa193957ac.tBKTDPNcaBZjlV2T
lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing
      Output information may be incomplete.
lsof: status error on /tmp/sshcontrol-e10fedd3d8237e382300367ff49267fa193957ac.tBKTDPNcaBZjlV2T: No such file or directory
lsof 4.89
 latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
 latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
 latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
 usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-E] [+|-e s] [+|-f[gG]]
 [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
 [+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Use the ``-h'' option to get more help information.

那就是 ”实际的“与该套接字关联的文件名不是”它应该是“:lsof 报告一个额外的文件扩展名。另一个套接字工具也ss给出了类似的结果。

最后一种奇怪的行为。我看到我有一个套接字/tmp可供使用kdewallet。它被称为(在我的情况下)kwallet5_enzo.socket。如果我使用lsof它,我会得到以下结果:

$ lsof /tmp/kwallet5_enzo.socket
lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing
      Output information may be incomplete.
COMMAND     PID USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
kwalletd5  1689 enzo    2u  unix 0x0000000000000000      0t0   27355 /tmp/kwallet5_enzo.socket type=STREAM
startkde   1690 enzo   19u  unix 0x0000000000000000      0t0   27802 /tmp/kwallet5_enzo.socket type=STREAM
dbus-laun  1742 enzo   19u  unix 0x0000000000000000      0t0   27802 /tmp/kwallet5_enzo.socket type=STREAM
dbus-daem  1743 enzo   19u  unix 0x0000000000000000      0t0   27802 /tmp/kwallet5_enzo.socket type=STREAM
start_kde  1800 enzo   19u  unix 0x0000000000000000      0t0   27802 /tmp/kwallet5_enzo.socket type=STREAM
kwrapper5  1843 enzo   19u  unix 0x0000000000000000      0t0   27802 /tmp/kwallet5_enzo.socket type=STREAM
ssh        3023 enzo    5u  unix 0x0000000000000000      0t0  104592 /tmp/sshcontrol-e10fedd3d8237e382300367ff49267fa193957ac.sGsWVH3Aqg03Hc7D type=STREAM
ssh        8862 enzo    5u  unix 0x0000000000000000      0t0 1131569 /tmp/sshcontrol-485e2aeac2a50cd6880fd929681d0e3a55817f06.deg4pBWKy2nusvrK type=STREAM
ssh       31767 enzo    5u  unix 0x0000000000000000      0t0 1006327 /tmp/sshcontrol-f1b458a85cd2aa9d5c115abc12afee9f485ad6b0.g2QSMGUDOG1LY8bZ

我(正确地)看到许多进程正在访问该套接字。但我还看到三个与该ControlPath功能相关的不需要的套接字通过 SSH 连接!我开始更多地考虑错误,而不是我自己的无知。

我如何才能可靠地检查哪个进程正在使用该套接字文件?

相关内容