如何检测孤立的Unix套接字文件?

用户3459474

我创建了一个反向SSH隧道,该隧道在一个远程服务器上创建了一个UNIX套接字(我们将其称为proxy_srv),因此我可以分2个步骤连接隧道所有者(在本问题的其余部分中命名为target_srv):从使用socat,将Unix套接字连接到TCP端口,并使用SSH客户端连接到该端口(SSH客户端似乎不接受连接到Unix套接字的连接,因此我使用该socat技巧作为变通方法)。

涉及的命令按顺序排列(足够重现,实际上还有更多内容,包括身份文件&co):

从target_srv:

me@target_srv:% ssh -CNR /tmp/$(hostname):127.0.0.1:22 me@proxy_srv -o ExitOnForwardFailure=yes

从proxy_srv:

me@proxy_srv:% socat TCP-LISTEN:2222 UNIX-CONNECT:/tmp/target_srv

从任何其他可以访问proxy_srv的计算机上:

ssh someone@proxy_srv

所有这一切的目的是从使用GPRS网络的机器到访问点之间自动建立一条隧道,以便在出现问题时我可以访问它们,考虑到我对它们没有物理访问权限(距离太远了) 。

我有2个主要问题:

  • 当有人删除proxy_srv上的Unix套接字文件时,隧道不会结束,因此我无法重新创建它(易于解决,仅使用一个专用用户,但对我来说仍然有点麻烦),

  • 最重要的是,如果由于某种原因而重新启动了target_srv上的某些内容,或者是物理重新启动,或者是系统崩溃,并且之后事情自动发生,那么proxy_srv上的文件不会被删除,并且隧道也无法重建。当然,我可以删除它,希望问题不会与另一台计算机发生冲突,但是我认为必须至少有一种更好的方法来解决此问题,例如,检测不再具有侦听器的套接字文件并自动删除定期(当然,在专用文件夹中)。

任何的想法?

卡米尔·马乔洛夫斯基

我知道有很多target_srv机器,因此您不使用它,-R 2222:127.0.0.1:22而是将2222proxy_srv端口临时连接到您选择的机器上。

我认为正确的工具是VPN。如果proxy_srv是VPN服务器,而target_srv是客户端,则可以将SSH隧道传输到所需客户端的(VPN)IP地址。如果您也将本地计算机作为客户端,则您甚至可以半直接访问其他客户端(无需SSH隧道)。VPN软件将负责在虚拟网络中建立,维护和更新target_srv的存在。

假设您不能使用VPN,并且您的基于套接字的配置是必须的。我不知道如何检测孤立的Unix域套接字,但是还有另一种方法来处理这种情况。

假设在proxy_srv上创建了一个辅助脚本/home/me/bin/ssh-tunnel-helper.sh

#!/bin/sh

soc1="$1".tmp
soc2="$1"

mv "$soc1" "$soc2" || { rm "$soc1"; exit 2; }
while sleep 40; do
   [ -e "$soc2" ] || exit 1
done

(不要忘了使其可执行)。

然后在target_srv上调用:

socket="/tmp/$(hostname)-tunnel"
while sleep 5; do
   ssh -CR "$socket".tmp:127.0.0.1:22 -o ExitOnForwardFailure=yes me@proxy_srv \
      /home/me/bin/ssh-tunnel-helper.sh "$socket"
done

现在

  • 当有人删除proxy_srv上的unix套接字文件时

ssh-tunnel-helper.sh脚本检测并退出。while对target_srv循环更新的隧道。

  • 如果出于某种原因重新启动了target_srv上的某些内容,则不会删除[...] proxy_srv上的文件

*-tunnel插座确实没有被删除,但sshd首先创建*-tunnel.tmp其重命名诀窍是在Unix中,您可以打开文件并将其移动(甚至删除)。重命名套接字不会干扰现有的隧道,但允许将来创建新的套接字。

如果辅助脚本被中断,则可能会留下一个过时的*-tunnel.tmp套接字,从而阻止将来建立隧道。我希望此类事件很少发生。rm /tmp/*-tunnel.tmp在proxy_srv上运行以进行恢复。即使此时恰巧要删除另一个即将重命名的套接字,它的帮助脚本也将退出,并且隧道将在一段时间内更新。

笔记:

  • 您可能要使用autossh而不是使用sshtarget_srv机器来检测断开的连接等。即使autossh您仍然需要while循环,因为autossh如果帮助程序脚本退出(例如,当有人删除proxy_srv上的套接字时),循环也会退出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何检测Boost Tcp套接字何时断开连接

来自分类Dev

如何使用akka连接到Unix套接字?

来自分类Dev

如何继续下载Java文件(套接字)

来自分类Dev

如何使Unix套接字监听器

来自分类Dev

如何检测服务器正在关闭UNIX域套接字?

来自分类Dev

Nginx无法使用Unicorn找到Unix套接字文件

来自分类Dev

如何从命令行访问Unix域套接字?

来自分类Dev

如何检测流套接字中的中止连接-PHP

来自分类Dev

如何检测客户端何时与UDS断开连接(Unix域套接字)

来自分类Dev

如何在不创建套接字文件的情况下使用Unix域套接字

来自分类Dev

退出应用程序时如何删除UNIX域套接字文件?

来自分类Dev

从C中的套接字文件描述符读取时如何检测定界符?

来自分类Dev

Unix套接字文件名错误

来自分类Dev

如何检测asyncio.StreamWriter.write上的关闭套接字?

来自分类Dev

如何通过套接字发送PDF文件?

来自分类Dev

如何“跟踪” Unix域套接字?

来自分类Dev

Unix套接字循环

来自分类Dev

Unix Internet套接字文件吗?

来自分类Dev

如何继续下载Java文件(套接字)

来自分类Dev

如何删除孤立文件?

来自分类Dev

Node.js,如何检测关闭的套接字?

来自分类Dev

如何使服务器套接字广播到那里,并让客户端套接字检测并连接

来自分类Dev

如何检测客户端何时与UDS断开连接(Unix域套接字)

来自分类Dev

如何在SOCK_DGRAM套接字对上检测EOF

来自分类Dev

如何在Ruby中检测断开的Unix域套接字?

来自分类Dev

如何在没有文件路径的情况下嗅探unix dgram套接字?

来自分类Dev

Unix套接字文件名错误

来自分类Dev

如何创建Unix域套接字?

来自分类Dev

Linux:TCP 套接字侦听:如何检测无法关闭套接字的客户端?

Related 相关文章

  1. 1

    如何检测Boost Tcp套接字何时断开连接

  2. 2

    如何使用akka连接到Unix套接字?

  3. 3

    如何继续下载Java文件(套接字)

  4. 4

    如何使Unix套接字监听器

  5. 5

    如何检测服务器正在关闭UNIX域套接字?

  6. 6

    Nginx无法使用Unicorn找到Unix套接字文件

  7. 7

    如何从命令行访问Unix域套接字?

  8. 8

    如何检测流套接字中的中止连接-PHP

  9. 9

    如何检测客户端何时与UDS断开连接(Unix域套接字)

  10. 10

    如何在不创建套接字文件的情况下使用Unix域套接字

  11. 11

    退出应用程序时如何删除UNIX域套接字文件?

  12. 12

    从C中的套接字文件描述符读取时如何检测定界符?

  13. 13

    Unix套接字文件名错误

  14. 14

    如何检测asyncio.StreamWriter.write上的关闭套接字?

  15. 15

    如何通过套接字发送PDF文件?

  16. 16

    如何“跟踪” Unix域套接字?

  17. 17

    Unix套接字循环

  18. 18

    Unix Internet套接字文件吗?

  19. 19

    如何继续下载Java文件(套接字)

  20. 20

    如何删除孤立文件?

  21. 21

    Node.js,如何检测关闭的套接字?

  22. 22

    如何使服务器套接字广播到那里,并让客户端套接字检测并连接

  23. 23

    如何检测客户端何时与UDS断开连接(Unix域套接字)

  24. 24

    如何在SOCK_DGRAM套接字对上检测EOF

  25. 25

    如何在Ruby中检测断开的Unix域套接字?

  26. 26

    如何在没有文件路径的情况下嗅探unix dgram套接字?

  27. 27

    Unix套接字文件名错误

  28. 28

    如何创建Unix域套接字?

  29. 29

    Linux:TCP 套接字侦听:如何检测无法关闭套接字的客户端?

热门标签

归档