通过SSH网关与rsync端口(873)实现跨服务器rsync传输的问题咨询
问题背景
服务器架构:
server A --> server B (开放22端口) --> (防火墙) --> server C (开放873端口)
IP信息:
- server B:10.10.10.5
- server C:10.10.10.6
- rsync模块名:
dog
- rsync模块名:
当前操作:从server A通过22端口连接到server B,希望将server B的文件通过873端口传输到server C,执行了以下命令:
rsync --list-only -e "ssh 10.10.10.5 rsync" 10.10.10.6::dog
出现错误:
rsync: did not see server greeting rsync error: error starting client-server protocol (code 5) at main.c(1666) [Receiver=3.1.2]
疑问:该架构下能否实现rsync传输?(注:Server C无法开放22端口,仅873端口开放且rsync守护进程已运行)
解答
可以实现rsync传输,原命令的问题在于-e参数用法错误,-e用于指定rsync调用的远程shell,你写的ssh 10.10.10.5 rsync不符合语法逻辑。
以下是两种正确的实现方式:
方式一:登录server B后执行rsync
先从server A登录到server B:
ssh 10.10.10.5
在server B的终端中直接执行rsync命令(server B可直接访问server C的873端口):
# 列出server C上dog模块的内容 rsync --list-only 10.10.10.6::dog # 同步文件示例:将server B的/local/path目录传输到server C的dog模块 rsync -avz /local/path 10.10.10.6::dog
方式二:从server A远程调用server B的rsync命令
无需登录server B,直接在server A终端执行:
# 列出模块内容 ssh 10.10.10.5 'rsync --list-only 10.10.10.6::dog' # 同步文件示例:将server B的/local/path目录传输到server C的dog模块 ssh 10.10.10.5 'rsync -avz /local/path 10.10.10.6::dog'
如果需要从server A直接传输文件到server C(通过server B中转),还可以用端口转发:
在server A上建立本地端口转发,将本地8730端口映射到server C的873端口:
ssh -L 8730:10.10.10.6:873 10.10.10.5
之后在server A的另一个终端执行rsync命令,访问本地转发端口:
rsync --list-only localhost:8730::dog
内容的提问来源于stack exchange,提问作者oraedoa
相关产品推荐
相关产品推荐

