【问题标题】:How to sync when you can't connect directly to the remote computer无法直接连接到远程计算机时如何同步
【发布时间】:2014-10-18 13:36:35
【问题描述】:

我有我的家用计算机 A 和一台工作计算机 C,我想使用 unison 进行同步。中间是一台工作计算机B。A可以与B通信,B可以直接与C通信,但A和C不能直接相互连接。事实上,通信图看起来像 A->BC。即A可以连接B但B不能连接A。

举个例子,我如何使用这个设置,如果我想从 A ssh 到 C,我目前执行以下操作

ssh -t -X -C me_B@B ssh -X me_C@C

如何从 A 同步运行并与 C 同步,也许使用 ssh 端口转发?

为了更清楚一点,C 对 Internet 的传出连接进行了未过滤。 B 具有与 C 和 Internet 的未经过滤的传入和传出连接。 A 是我的家用电脑。


更新

以下命令行适用于我至少将文件从 A 复制到 C

scp -oProxyCommand="ssh me_B@B nc -v %h %p" foo/* me_C@C:foo

有没有什么方法可以利用这个想法来让统一发挥作用?

【问题讨论】:

    标签: linux ssh portforwarding unison


    【解决方案1】:

    是的,可以使用 ssh 端口转发。如果要将 C 的 22 端口上的 ssh 转发到本地端口 3000(例如),请在 A 上使用以下命令:

    # Create the tunnel
    ssh -L 3000:C:22 userB@B -N
    

    发出命令后,您可以使用以下命令从 A 登录到 C:

    # Connect using the tunnel
    ssh -p 3000 userC@localhost
    

    注意:在下面的讨论中发现,在 OP 的网络中,只能使用以下命令建立通过隧道的连接:

    ssh -p 3000 -l userC localhost
    

    请注意,我使用的是-l userC 而不是userC@


    现在你可以像这样使用unison

    unison directory ssh://userC@localhost:3000 directory
    

    【讨论】:

    • unison 命令行是什么样的? unison directory ssh://me_B@localhost directory 之类的东西?
    • 让我们一步步测试。您可以使用我提供的命令从 A SSH 连接到 C 吗?
    • 我在一个窗口中运行 ssh -L 3000:C:22 userB@B -N 并询问我输入的 B 的密码。然后我从另一个执行 ssh -p 3000 userC@localhost,我在第一个窗口中看到 channel 2: open failed: administratively prohibited: open failed。第二个窗口只显示ssh_exchange_identification: Connection closed by remote host
    • 那么端口转发被B的管理员禁止了。没有机会。
    • ssh -t -X -C me_B@B ssh -X me_C@C 怎么会起作用,我可以为 unison 做类似的事情吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多