OpenSSH 在终止时不清理域套接字

OpenSSH 在终止时不清理域套接字

我有一个本地 unix 套接字,通过 SSH 隧道连接到远程实例上的另一个 unix 套接字:

ssh -N -L $HOME/my.sock:/var/run/another.sock

但是,当我优雅地终止 ssh (即 ctrl+C 或 SIGTERM)时,问题$HOME/my.sock仍然存在。看来这个没有清理干净。有这个选项/标志吗?

这是有问题的,因为如果我第二次运行该命令,它会由于现有的套接字文件而失败。 (我也看不到会覆盖现有套接字文件的“重用”标志/选项。)而且我宁愿不添加rm -f $HOME/my.sock.

答案1

简短的回答,您可以使用命令行标志来控制它:-o 'StreamLocalBindUnlink=yes'

长答案:参见 ssh_config(5):

 StreamLocalBindUnlink
         Specifies whether to remove an existing Unix-domain socket file for local or
         remote port forwarding before creating a new one.  If the socket file already
         exists and StreamLocalBindUnlink is not enabled, ssh will be unable to forward
         the port to the Unix-domain socket file.  This option is only used for port for‐
         warding to a Unix-domain socket file.

         The argument must be yes or no (the default).

相关内容