用户特定的 SFTP 隧道

用户特定的 SFTP 隧道

基本上,我有几个不同的 Centos7 LAMP 堆栈在不同的虚拟机(在 xenserver 上)和 openSSH 上运行。为了安全起见,我还运行了几个中间代理身份验证服务器(一个用于 HTTP,一个用于 SSH,一个用于 SFTP),这样所有的虚拟机都可以在相同的端口上运行。HTTP 代理正在运行,但我在设置 SFTP 代理时遇到了麻烦。我希望客户端根据其用户名通过隧道连接到适当的 VPS。

我尝试过很多不同的方法,研究过几种不同的方法试图让它发挥作用,但都无济于事。

对于此示例,我们假设有人尝试通过我的外部 IP(12.345.678.90)在端口 80 上查看 vps1.com。首先,他们到达路由器(该端口将他们转发到 HTTP 代理),然后 HTTP 代理通过 VirtualHosts 将它们转发到正确的本地计算机。我们假设 vps1.com 的本地 IP 为 192.168.1.10,而 vps2.com 的本地 IP 为 192.168.1.20。它们被转发到正确的本地 IP 并提供正确的内容。太好了,这部分工作正常。

现在我们假设 vps1.com 的网站管理员想要登录并更改他的网站。他将以用户 johnVPS1 的身份在 SFTP 客户端上登录到 12.345.678.90 的端口 2222。路由器成功将他端口转发到 SFTP 代理(位于 192.168.1.7)。现在 SFTP 代理应该将他隧道化或转发到正确的 VPS,以便他可以编辑他的网站,但他将无法访问其他任何内容。

                          External IP 12.345.678.90
                                   Router
             ---------------------------------------------
                   /                              \
       Port 80    /                                \  Port 2222
                 /                                  \ 
                /                                    \
         HTTP Proxy                                  SFTP Proxy
           /     \                                    /     \
vps1.com  /       \  vps2.com              johnVPS1  /       \  billVPS2
         /         \                                /         \ 
192.168.1.10:80    192.168.1.20:80   192.168.1.10:2222   192.168.1.20:2222

到目前为止我尝试过的一些方法 ---

  • 将 SFTP 代理服务器上的用户 ChrootDirectory 设置为相应服务器的 SSHFS 挂载目录
  • 将 SFTP 代理服务器上的用户 ChrootDirectory 设置为已挂载目录的符号链接目录。
  • 在代理服务器上... ssh -R 2222:192.168.1.10:2222(这只是给我 SFTP 帮助菜单,我想我搞砸了一些东西)
  • 在代理服务器上... ssh -L 2222:localhost:2222[电子邮件保护]-p 2222(这打开了到 192.168.1.10 的 SSH,但当我远程登录时似乎没有转发)
  • 在 /etc/ssh/sshd_config 中使用 Match User 和 PermitOpen 192.168.1.10:2222
  • 将 GatewayPorts 更改为是

请问,有人能给我指点迷津吗?我是不是全都搞错了,还是我已经很接近正确答案了,只是漏掉了什么?我花了几天时间才弄清楚,如果有人能给我指点迷津,我将不胜感激!

相关内容