是否可以使用目标主机上不同用户的权限将端口转发到 Unix 域套接字?

是否可以使用目标主机上不同用户的权限将端口转发到 Unix 域套接字?

考虑一个服务器 X,其上有用户 A 和 B。

我有ssh作为用户 的权限A,以及sudo作为用户 的权限B,但我没有ssh作为用户 B 的权限。

有一个其路径的 Unix 域套接字/path/to/socket,由用户 B 拥有。

我想将本地主机端口 7070 转发到/path/to/socket。第一次尝试如下:

ssh -L7070:/path/to/socket A@X

当我尝试连接到 localhost 7070 时,出现预期的权限错误,因为用户 A 没有访问 Unix 域套接字的权限。

 channel 2: open failed: administratively prohibited: open failed

有一种解决方法是socat将端口转换为套接字,但它不安全,因为服务器 X 是共享的,登录到服务器 X 的其他用户不应该能够连接到该端口。

ssh -L7070:localhost:7070
sudo -iu B
socat tcp-listen:7070,fork,reuseaddr unix-connect:/path/to/socket

我可以将某些选项传递给 ssh 吗,以便它允许我以sudo用户 B 的身份授予 ssh 服务器进程连接到 Unix 域套接字的权限?

答案1

不,你确实必须ssh B@X这样做才能实现这一点。远程连接由接受你登录的同一个 sshd 处理程序进程建立 - 它不使用 nc/socat 之类的外部工具,因此无法“sudo”它。

socat使用 Unix 套接字而不是 TCP 套接字来应用您的解决方法 -unix-listen:用于在只有用户 A 和 B 可以访问的路径上建立“中间”套接字,并将 SSH 隧道指向该套接字。

相关内容