通常有一个 SSH 客户端连接到 SSH 服务器。客户端然后放置在服务器上执行的命令。现在,有没有办法反过来呢?这样客户端连接到服务器,但服务器也连接到客户端并且能够在客户端上执行命令。那可能吗?
我正在寻找这个的原因是我在两个不同的网络中有两台服务器(A 和 B),这两个网络都连接到 Internet。服务器 A 可以通过端口转发访问,但服务器 B 不能。由于服务器 A 完成了所有工作,我希望服务器 B 连接到服务器 A 并执行服务器 A 想要它做的任何事情。
这样的反向连接可能吗?或者可能是双向 SSH 连接?
编辑:
作为一个例子,我想做以下事情。在服务器 A 上并且知道服务器 B 已通过 SSH 连接到我,我想连接以连接到服务器 B 并放置如下命令
echo "This is test content." > /home/myuser/mytestfile`
之后我想找一个文件
/home/myuser/mytestfile
在服务器 B 中。
正如@terdon 所说,您可以使用以下命令通过 SSH 在远程服务器上执行某些操作并将输出保存(重定向)到本地实例:
您还可以使用以下命令在本地实例上执行某些操作并将输出通过管道传输到远程服务器并通过命令保存
tee
:我同意 @Sebastian Stark的观点,您可能会问如何使用 SSH 端口转发创建反向隧道。SSH 连接允许使用选项将远程服务器上的端口绑定到本地
-R
端口。反之亦然,您可以将本地端口绑定到 远程端口-L
。在您的情况下,应使用以下选项应用第一个场景
-R
:该命令将像往常一样建立 from
HostA
to的连接HostB
,并将 port2222
on绑定HostB
到22
loopback 接口上的 port onHostA
。这意味着当您在端口上请求某些内容时,请求将由侦听端口上的服务处理,通常这是 SSH 服务器。此时,您可以使用以下一些命令从 to 连接回来:2222
HostB
22
HostA
HostB
HostA
或者你可以使用上面的命令,例如:
请注意,您应该已经安装了 SSH 服务器
HostA
!一种有趣的用法是,您可以将远程端口绑定
HostB
到本地网络中其他实例的端口HostA
:192.168.100.115
局域网中任何一台 Windows 计算机的 IP 地址在哪里HostA
,姑且称之为HostC
。这些选项-fTN
会将 ssh 连接推到后台,您将只有一条从HostB:3389
throughHostA
到的隧道HostC:3389
。我通过结合使用它
autossh
来保持连接活跃。例如,我的下一行crontab
:我的文件中定义
remote-server-with-public-ip
的主机在哪里:~/.ssh/config
HostA
端口
2223
,6900
,3389
onHostB
不是公共的,我只能通过另一个 SSH 连接访问它们——例如从HostD
Internet 上的某个地方。但是要访问8080
我正在使用带有反向代理的 ApacheHostB
:-) 并且虚拟主机的配置文件如下所示:proxy
和proxy_http
是必需的。进一步阅读: