我可以在一个连接SSH隧道和反向SSH隧道?

我目前使用.ssh/config存储我的办公室的networking:

 Host office Hostname office.company.com Port 22222 User hobbes3 

要连接到远程办公室Postgres数据库,我需要SSH到办公室服务器,然后跳转到办公室数据库,所以我使用这样的SSH隧道

 ssh -L 5433:db:5432 office 

(我使用端口5433,因为我的机器上已经安装了本地Postgres数据库)

(而db是办公networking上数据库服务器的parsing主机名)

我也使用Xdebug进行PHPdebugging,所以我的本地机器正在监听端口9000.因此,我使用这样的反向ssh隧道

 ssh -R 9000:localhost:9000 office 

但这意味着我需要打开2个terminal,我试图将这两个命令组合成一个这样的

 ssh -L 5433:db:5432 -R 9000:localhost:9000 office 

(我知道我可以使用xdebug.remote_host直接连接到本地计算机的公共IP,但是我想使用隧道技术,因此我可以在办公室或家中在两个不同的IP下工作)

但只有一半工作( -L隧道工作,但-R没有)。

我可以在一个命令中同时使用正常和反向SSH隧道吗? 如果是这样,我做错了什么? 提前致谢!

在同一隧道中使用直接和反向端口转发是完全合法的。 你甚至可以乘以每个选项来设置多个端口转发。

我确定你的问题有一点不同:你想转发用于X连接的端口9000,你的方法很可能与两个相关的安全机制冲突:X服务器自己的授权和SSH自己的X转发控制。 如果您只想通过SSH客户端运行X应用程序,则不需要手动通过X端口。 相反,请configuration您的SSH服务器和客户端以通过此configurationbuild立X-forwarding:

1)在SSH服务器上,在/ etc / ssh / sshd_config中设置“X11Forwarding yes”(不要忘了重启sshd)

2)在客户端使用明确的-X选项作为ssh,或者在你的.ssh / config的连接主机上添加“ForwardX11”行。 命令就是这样的:

ssh -X -L 5433:db:5432 office

必须通过所有X控制机制之间的协议来设置X转发。