我有两个进程(客户端和服务器)使用 Unix 套接字相互通信/tmp/tm.ipc
。两个进程(客户端和服务器)都不支持 TCP。
客户端-> /tmp/tm.ipc
->服务器
现在,我想将两个进程分开以在同一子网中运行的两台不同计算机上运行。因此,我想在两者之间建立某种 TCP 桥。
客户端 -> /tmp/tm-machine1.ipc
-> TCP 端口 15432 -> /tmp/tm-tm-machine2.ipc
-> 服务器
我本来想使用Socat,但这看起来它只涵盖了服务器监听部分。
socat -d -d TCP4-LISTEN:15432,fork UNIX-CONNECT:/tmp/tm.ipc
现在我想将客户端的 Unix 套接字连接到该端口。我怎样才能做到这一点?
答案1
开放SSH足够的版本(OpenSSH 6.7/6.7p1 (2014-10-06) 或更高版本)可以做到这一点,如果 SSH 从客户端启动到服务器系统,可以编写类似的内容
ssh -L /path/to/client.sock:/path/to/server.sock serverhost
然后客户端将连接到/path/to/client.sock
,服务器将侦听/path/to/server.sock
。您可能还需要设置-o StreamLocalBindUnlink=yes
,请参阅ssh_config(5)
。
(并且请不要使用/tmp
;不当使用/tmp
可能导致本地安全漏洞或拒绝服务或......)