![如何从可通过 ssh *通过远程登录服务器*访问的服务器 rsync 到没有外部 IP 地址的本地计算机?](https://linux22.com/image/1524398/%E5%A6%82%E4%BD%95%E4%BB%8E%E5%8F%AF%E9%80%9A%E8%BF%87%20ssh%20*%E9%80%9A%E8%BF%87%E8%BF%9C%E7%A8%8B%E7%99%BB%E5%BD%95%E6%9C%8D%E5%8A%A1%E5%99%A8*%E8%AE%BF%E9%97%AE%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%20rsync%20%E5%88%B0%E6%B2%A1%E6%9C%89%E5%A4%96%E9%83%A8%20IP%20%E5%9C%B0%E5%9D%80%E7%9A%84%E6%9C%AC%E5%9C%B0%E8%AE%A1%E7%AE%97%E6%9C%BA%EF%BC%9F.png)
我可以通过登录服务器 ( ) ssh 到远程服务器系统。从登录服务器,我可以 ssh 到特定服务器 ( )。我无法直接访问特定服务器 ( )。如何运行本地 rsync 以从此特定服务器获取目录?我无法从特定服务器 rsync 到本地计算机,因为我的本地计算机没有可公开访问的 IP 地址。ssh [email protected]
ssh user@supercool
ssh [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)。