从远程 SSH 会话通过 SSH 返回本地计算机

从远程 SSH 会话通过 SSH 返回本地计算机

我正在尝试使用 SSH 做一些相当不寻常的事情(至少对我来说),但我无法让它工作,希望你能帮忙。

我想使用 SSH 从我的 Mac 建立到远程服务器的连接。到目前为止一切顺利。现在有点棘手,建立到远程服务器的连接后,我想从远程服务器启动到本地计算机的连接。我知道,这太疯狂了。基本上,我需要完成这些步骤才能浏览远程服务器,然后将文件信息发送回我的本地计算机,以便本地计算机上的应用程序可以处理它。希望这有意义!

目前,如果我登录到远程服务器后通过 SSH 返回本地机器,终端就会一直在那里运转,即使使用 -v 也不会出现任何错误。

我试图通过查看 $SSH_CLIENT 变量的输出来发现我应该调用的位置,但我使用的是标准的普通互联网连接(没有静态 IP 地址),我想这可能是导致问题的原因。

我已经确定的事情:我在 Mac(OS X 10.6.4)上,并且在系统偏好设置/共享中启用了远程登录。如果我尝试从 LAN 上的另一台机器通过 SSH 连接到我的 Mac,我可以毫无问题地连接。如果我尝试从我的远程服务器通过 SSH 连接到另一台服务器(不是我的本地机器),我可以毫无问题地连接。

因此,上述事实让我认为,我对本地和远程机器上的防火墙等没有问题。

我确信我肯定忽略了这里一些非常明显的东西,但我无论如何都无法掌握它。

任何帮助、链接或正确方向的推动都将不胜感激!

答案1

如果当您重新连接到本地时,它允许您在挂起之前登录,那么这不是答案。如果您没有走到那一步,您可能无法返回到您的 Mac(要么无法到达任何地方,要么在网关上点击 SSH)。尝试反向隧道(它需要在您的服务器上的 sshd_config 中将 GatewayPorts 设置为 On,但我相信这是默认设置):
you@yourMac$ ssh -R 2000:localhost:22 user@remoteserver
这应该允许您像往常一样连接到服务器,但也会打开隧道,以便您可以重新连接到端口 2000(任何超过 1024 的端口都应该可以工作),所以you@yourserver$ ssh -p2000 user@localhost

编辑:将主机名更改为 localhost

答案2

您的本地计算机是否可以从服务器访问?您可以 ping 通它吗?我之所以问这个问题,是因为如果您的计算机可以访问,那么您所做的应该可以正常工作。您的服务器是在互联网上还是在 LAN 中,是否在同一子网中?

无论如何,如果您只需要编辑一个文件,为什么不直接使用 scp 将文件复制到本地计算机呢?您可以使用 ssh 浏览远程服务器上的文件,当您获得其路径后,在本地计算机(在另一个终端中)输入:

scp user@server:/path/to/file/on/server /local/path/to/save/file

要放回文件,请再次 scp 切换路径。

注意:你不需要初始 ssh 连接来使用 scp - 它将创建一个新的

如果您需要在终端中访问它,则上述内容适用。在 Linux 上(当然在 Mac 上也可以,但我不知道该怎么做),您可以在“网络中”安装 ssh 远程位置,并像使用本地磁盘一样使用该连接(这是 sftp,连接形式为:sftp://user@server:/path/to/mount我猜这就是您所需要的,而不是远程终端连接,这样您就可以直接使用 Mac 应用程序编辑文件。

答案3

你可能还想看看sshfs(你需要MacFuse为此)。这样您就可以在远程计算机上安装目录并像访问计算机上的常规文件夹一样访问它们。最重要的是,您仍然可以ssh进入计算机并创建/搜索所需的文件。转让它们将会像传输本地文件一样简单。

答案4

我遇到了同样的问题,但原因不同。我想从服务器运行一个脚本来从我的工作站拉取文件——从服务器拉取我的主目录的自动备份,而不是从我的工作站推送文件。

为什么?因为对我来说,让服务器处理备份比让工作站处理备份更有意义。我只需要一个通用脚本来处理多个工作站,而不是试图让每个工作站上的脚本保持更新。

那么你如何测试呢?我的服务器是无头的,所以我必须通过 ssh 连接到它,但我无法通过 ssh 或使用任何在 ssh 上运行的工具重新连接到我的工作站。反向隧道满足了这一要求。另一种选择是使用 at 命令运行测试,然后在作业开始之前删除隧道。这两种方法都有些笨拙,但反向端口更简单、更灵活。另外,我已经使用本地端口转发来构建到其他计算机的 VNC 隧道。

相关内容