Ssh
rsync 如何區分destination 是在目錄名中帶有’:’ 和’@’ 的本地目錄,還是遠端SSH?
從技術上講,我們可以創建一個名為
user@example.com:
(它是一個有效的 UNIX 路徑,不是嗎?)的本地目錄,那麼rsync
內部如何知道:rsync test/ user@example.com:/test/
方法:
- 目的地是本地路徑
user@example.com:/test/
(即./user@example.com:/test/
)- 目標是遠端主機
user@example.com:/test/
?
出於好奇,
rsync
使用的決策規則是什麼?
這很複雜。
rsync中建議的解決方案:文件名中的冒號似乎通常可以工作,但是有很多可能的極端情況。
範例: rsync 如何知道
rsync src ./hello@b.com:/test/
dest 是遠端的還是本地的?它可以是
./hello@b.com:/test/
帶有:
和@
在目錄名稱中的本地路徑。或者它可能是一個帶有使用者名
./hello
(奇怪的 Unix 使用者名,但有可能!嘗試使用useradd
!)、 hostb.com
和 path的遠端/test/
。這是OpenSSH的
scp
實現中解析URI的程式碼,值得一讀。IETF 草案中解釋了這些規則https://datatracker.ietf.org/doc/html/draft-ietf-secsh-scp-sftp-ssh-uri-04