我可以在一个连接中实现 ssh 隧道和反向 ssh 隧道吗?

我可以在一个连接中实现 ssh 隧道和反向 ssh 隧道吗?

我目前用来.ssh/config存储我的办公室的网络:

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

要连接到远程办公室 Postgres 数据库,我需要通过 SSH 连接到办公室服务器,然后跳转到办公室数据库,因此我使用 ssh 隧道,如下所示

ssh -L 5433:db:5432 office

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

(并且 db 是办公网络上数据库服务器的解析主机名)

我也用调试为了进行 PHP 调试,我的本地机器正在监听端口 9000。因此我使用像这样的反向 ssh 隧道

ssh -R 9000:localhost:9000 office

但这意味着我需要打开两个终端,我尝试将两个命令合并为一个,如下所示

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

(我知道我可以用来xdebug.remote_host直接连接到我本地机器的公共 IP,但我想使用隧道,这样我就可以在办公室或家里使用两个不同的 IP 工作)

但只有一半起作用(-L隧道起作用了,但是-R没有起作用)。

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

答案1

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

我确信您的问题有些不同:您想要转发用于 X 连接的端口 9000,并且您的方法很可能与另外两个相关的安全机制相冲突:X 服务器自己的授权和 SSH 自己的 X 转发控制。如果您只打算通过 SSH 客户端运行 X 应用程序,则无需手动隧道 X 端口。相反,请通过以下配置配置您的 SSH 服务器和客户端以建立 X 转发:

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

2) 在客户端,要么使用 ssh 的显式 -X 选项,要么在连接的主机的 .ssh/config 中添加行“ForwardX11”。命令如下:

ssh -X -L 5433:db:5432 办公室

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

相关内容