我大量使用 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 连接!我开始更多地考虑错误,而不是我自己的无知。
我如何才能可靠地检查哪个进程正在使用该套接字文件?