OpenSSH 具有允许您通过控制套接字复用连接的功能。人们普遍认为,由于公共访问套接字会引发安全问题,这些控制套接字不应驻留在公共区域。
使用诸如~/.ssh/sockets
套接字位置之类的东西也是一般策略。这提出了一个我已经解决了一段时间的问题。
当主进程被强制终止并且清理未完成时,您的套接字存储将充满需要手动清除的剩余套接字。此类情况的示例包括断电或其他硬件故障。
现代 Linux 发行版都/run
包含包含易失性运行时数据以及/run/user/<uid>
针对每个用户的易失性运行时数据。该目录只能由所有者访问,并且由系统为用户创建。
考虑到控制套接字完全符合此描述,我很乐意将套接字转移到那里。然而,存在某些问题 OpenSSH 配置仅允许您通过用户名来寻址当前用户,而目录是为用户的 UID 创建的。我在主机之间共享一般配置,因此我不想在配置中对 UID 进行硬编码。
我正在寻找一种干净的解决方案,允许人们使用通用 OpenSSH 配置,从而在启动时清除套接字。
答案1
自 2016 年 2 月发布的 OpenSSH 7.2 起,%i
现在支持ControlPath
表达式,扩展为数字 UID。
例如,
ControlPath /run/user/%i/master-%l-%r@%h:%p
或者,如果较新的 OpenSSH 不可用,您可以考虑使用它/dev/shm
来存储临时数据。它是世界上可写的并且始终是tmpfs
。尽管其他用户可以访问它,但控制套接字本身具有适当的访问权限,因此它应该是安全的。
https://superuser.com/questions/45342/when-should-i-use-dev-shm-and-when-should-i-use-tmp