尝试使用 ssh 密钥通过反向端口转发在两个远程服务器之间运行 rsync

尝试使用 ssh 密钥通过反向端口转发在两个远程服务器之间运行 rsync

我正在尝试在两台服务器之间运行 rsync。我的基础是这篇文章:如何在两个遥控器之间同步文件?

我发现缺少的是当需要密钥(相同的密钥)登录每个服务器时如何促进 rsync(通过 ssh)。

这是我最接近的:

ssh -i ~/path/to/pem/file.pem -R localhost:50000:SERVER2:22 ubuntu@SERVER1 'rsync -e "ssh -p 50000" -vur /home/ubuntu/test localhost:/home/ubuntu/test'

看起来初始连接工作正常,但是我似乎无法弄清楚如何指定 SERVER2 的密钥和用户名。

有什么想法吗?

答案1

我建议使用 ssh 代理 - 这样您只需要一对密钥,您的私人部分就保存在您的工作站上。无需在其他服务器上复制它(这本身就是个坏主意)或为特定服务器创建其他密钥对。

启动 ssh 代理的方法不止一种,您可以阅读更多内容那里。这是最简单的:

eval ($ssh-agent)

然后将您的密钥添加到代理

ssh-add /path/to/private.key

如果您的密钥受到保护,这会要求您输入密码。添加后,您可以连接到具有公共部分的服务器,而无需提示。

此外,您可以继续从该服务器 ssh 到另一台服务器,并且代理将进一步进行您的身份验证,只要允许代理转发您的途中的 ssh 服务器选项设置为是,这基本上是默认设置。

嗯,这是序言:)

现在回到你的案例。除非服务器配置禁止端口转发,否则方法如下:

  1. 检查您是否可以使用代理连接到 SERVER2 -

ssh ubuntu@SERVER1 'echo Hi from $(hostname)'

  1. 检查您的代理从 SERVER1 到 SERVER2 的转发是否正常

ssh -t ubuntu@SERVER1 ssh SERVER2 'Hi from $(hostname)'

  1. 仅使用端口转发启动连接

ssh -R localhost:50000:SERVER2:22 -Nv

并使该终端窗口保持打开状态。

  1. 在新的终端窗口中,登录到 SERVER1 并从那里检查端口是否按请求转发:

[SERVER1]ssh -p 50000 localhost 'echo Hi from $(hostname)'

你应该看到来自 SERVER2 的 Hi

如果上述所有 4 个步骤都适合您,那么您将能够执行 rsync 命令 - 只需省略-i part

答案2

三个步骤:

  1. 创建一个~/.ssh/configon ,SERVER1其中包含连接到 的所有内容SERVER2,例如:

    Host SERVER2
      Port 50000
      User user2
      Hostname localhost
      IdentityFile ~/path/to/pem/file.pem
    
  2. 尝试SERVER2在不带任何参数的情况下连接到主机(从SERVER1启动端口转发后开始):

    ssh SERVER2 # works?
    

    如果没有,请添加-vvv并调查出了什么问题。

  3. 运行 rsync 命令:

    ssh -i ~/path/to/pem/file.pem -R localhost:50000:SERVER2:22 ubuntu@SERVER1 \
      'rsync -vur /home/ubuntu/test SERVER2:/home/ubuntu/test'
    

请注意,如果您想通过这种方式进行操作,您需要在 上拥有身份验证密钥SERVER1。最好在那里创建新密钥,而不是从您的机器上复制私钥。

相关内容