通过 ssh 隧道进行 rsync

通过 ssh 隧道进行 rsync
----------         /|                      /|             ------------
|  Home  |        | |                     | |             |    Work   |
|        |--------| |---------------------| |-------------|           |
|ssh-serv|   Firewall:Port-22=open     Firewall           |           |
----------        | |                     | |             ------------
                  |/                      |/

这是上图的场景:

工作人员可以访问他的工作计算机,并且还设置了家庭 ssh 服务器。该员工想要从他的 PC@Home 访问他的工作机器,但公司的政策限制通过 Firewall@Work 进行访问,但允许他通过反向 ssh 隧道进行连接。因此,工作人员从他的workstation@Work发出以下命令:

ssh -fN -R 19999:localhost:22 Home-user@Home

现在,他可以从他的 PC@Home 发出以下命令并连接到他的workstation@Work 的 ssh 服务器:

ssh -v Work-user@localhost -p 19999

工作人员是否可以使用 rsync 使用现有隧道将目录从他的 PC@Home 复制到他的workstation@Work?

答案1

我认为您正在寻找的功能称为连接共享。将其添加到您的$HOME/.ssh/config文件中:

ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r

摘录 #1SSH 可以做到吗?使用远程服务器的生产力技巧

幸运的是,OpenSSH 有一个功能,可以让您在已连接的服务器上更快地获取另一个终端:连接共享。

摘录#2

共享连接不仅仅是多个终端窗口的福音;它们还使将文件复制到远程服务器或从远程服务器复制文件变得轻而易举。如果您通过 SSH 连接到服务器,然后使用 scp 命令将文件复制到其中,scp 将利用您现有的 SSH 连接 - ...连接也与 rsync、git 和任何其他使用 SSH 进行连接的命令共享。

参考

答案2

您可以控制ssh命令(严格来说,rsh命令(尽管ssh现在是默认值)rsync有两种使用方式。

  • 设置RSYNC_RSH环境变量
  • 通过传递-e旗帜

ssh您可以将其中任何一个设置为连接所需的所有标志。

通过环境变量:

home$ RSYNC_RSH="ssh -p 19999"
home$ rsync somelocalfile Work-user@localhost:~

-e标志:

home$ rsync -e "ssh -p 19999" somelocalfile Work-user@localhost:~

答案3

处理复杂的 SSH 设置(例如隧道)的简单方法是在您的~/.ssh/config文件。例如,如果您确定ssh -fN -R 19999:localhost:22 Home-user@Home可以创建隧道并ssh -v Work-user@localhost -p 19999可以使用它,则为这些创建别名:

Host work-tunnel
Hostname Home
Username Home-user
RemoteForward 19999 localhost:22

Host workstation
Hostname localhost
Username Work-user
Port 19999

然后运行ssh -fN work-tunnel建立隧道,并使用ssh workstation登录工作站。

就其他应用程序而言,workstation它是与您通过 SSH 连接的任何其他应用程序一样的主机。他们不关心 SSH 在幕后做了什么。所以您可以像平常一样使用它们。例如,rsync somefile workstation:somedir将文件复制到工作站。

答案4

是的,由于工作人员正在通过 ssh 的端口 22 进行访问,因此允许通过防火墙进行 SSH 进出。您可以检查防火墙访问列表中是否没有为 ssh 编写的策略。

相关内容