设置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 可能不知道您最常使用哪一种。