为什么“RSYNC_RSH”不起作用,而“--rsh”却起作用?

为什么“RSYNC_RSH”不起作用,而“--rsh”却起作用?

设置RSYNC_RSH不起作用,但--rsh选项有效。为什么?

rsync正确使用该--rsh选项:

$ rsync --rsh "echo" invalid invalid::invalid
rsync: server sent "invalid rsync --server --daemon ." rather than greeting
rsync error: error starting client-server protocol (code 5) at main.c(1657) [sender=3.1.3]

但我期望RSYNC_RSH会起到同样的作用,但事实并非如此:

$ RSYNC_RSH=echo rsync invalid invalid::invalid
rsync: getaddrinfo: invalid 873: Name or service not known
rsync error: error in socket IO (code 10) at clientserver.c(127) [sender=3.1.3]

我尝试过rsync版本3.1.2-1+deb9u1和3.1.3-5.fc29.x86_64。

答案1

这是按设计工作的。

您正在使用 rsync“守护进程”语法:hostname::module。当您将其与 一起使用时--rsh,它会使用远程 shell(例如 )连接到服务器ssh,但随后使用rsyncd.conf.当你使用这个时没有 --rsh,它尝试在 TCP 端口 873 上与 rsync 服务器建立未加密的网络连接。

设置RSYNC_RSH不会导致 rsync“守护进程”语法使用远程 shell。

RSYNC_RSH是一个“环境变量”。它旨在针对您的整个环境进行设置。当您需要时,它会更改 rsync 使用的远程 shell不是使用 rsync“守护进程”语法。这在古代很有用,当时有几种不同的远程 shell,因此 rsync 可能不知道您最常使用哪一种。

相关内容