我正在尝试在两台服务器之间运行 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 服务器选项设置为是,这基本上是默认设置。
嗯,这是序言:)
现在回到你的案例。除非服务器配置禁止端口转发,否则方法如下:
- 检查您是否可以使用代理连接到 SERVER2 -
ssh ubuntu@SERVER1 'echo Hi from $(hostname)'
- 检查您的代理从 SERVER1 到 SERVER2 的转发是否正常
ssh -t ubuntu@SERVER1 ssh SERVER2 'Hi from $(hostname)'
- 仅使用端口转发启动连接
ssh -R localhost:50000:SERVER2:22 -Nv
并使该终端窗口保持打开状态。
- 在新的终端窗口中,登录到 SERVER1 并从那里检查端口是否按请求转发:
[SERVER1]ssh -p 50000 localhost 'echo Hi from $(hostname)'
你应该看到来自 SERVER2 的 Hi
如果上述所有 4 个步骤都适合您,那么您将能够执行 rsync 命令 - 只需省略-i part
答案2
三个步骤:
创建一个
~/.ssh/config
on ,SERVER1
其中包含连接到 的所有内容SERVER2
,例如:Host SERVER2 Port 50000 User user2 Hostname localhost IdentityFile ~/path/to/pem/file.pem
尝试
SERVER2
在不带任何参数的情况下连接到主机(从SERVER1
启动端口转发后开始):ssh SERVER2 # works?
如果没有,请添加
-vvv
并调查出了什么问题。运行 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
。最好在那里创建新密钥,而不是从您的机器上复制私钥。