如何从可通过 ssh *通过远程登录服务器*访问的服务器 rsync 到没有外部 IP 地址的本地计算机?

如何从可通过 ssh *通过远程登录服务器*访问的服务器 rsync 到没有外部 IP 地址的本地计算机?

我可以通过登录服务器 ( ) ssh 到远程服务器系统。从登录服务器,我可以 ssh 到特定服务器 ( )。我无法直接访问特定服务器 ( )。如何运行本地 rsync 以从此特定服务器获取目录?我无法从特定服务器 rsync 到本地计算机,因为我的本地计算机没有可公开访问的 IP 地址。ssh [email protected]ssh user@supercoolssh [email protected]

答案1

因此你的设置是这样的:

Local Machine --> Intermediate Server --> Remote Server

如果您能够在远程服务器上运行 rsync 命令并且本地计算机正在运行 sshd,您可以执行以下操作:

使用以下 ssh 命令登录中间服务器

ssh user@<intermediate server> -R 1024:localhost:22

这将创建一个反向 SSH 隧道。中间服务器上端口 1024 上的任何 SSH 连接都将被重定向回本地计算机。

此时您将登录到中间服务器。然后您需要将隧道延伸到远程服务器。在中间服务器上运行:

ssh user@<remote server> -R 1024:localhost:1024

现在,远程服务器上端口 1024 上的任何 SSH 连接都将返回到端口 1024 上的中间服务器,然后通过隧道返回到您的本地计算机。呼!

现在我们需要将其包装到 rsync 中。Rsync 有一个远程 shell 选项 (-e),您可以使用它来指定 ssh 选项。因此,您可以在远程服务器上运行(这有点根据过去的经验猜测,可能需要进行一些调整):

rysnc -<whatver rsync options you want> -e "ssh -p 1024" <source directory> <local machine user>@localhost

请记住始终先使用 --dry-run 运行 rsync 命令以确保它执行您预期的操作(根据所涉及的 rsync 版本,加上各种详细程度 -v、-vv 或 -i 或 -ii)。

相关内容