錯誤現象
rsync -r --delete test/ 192.168.1.118:/cygdrive/d/test
# 結果:connect refused
核心原因
Connection refused 表示 TCP 連線被目標主機明確拒絕(發送 RST 封包),而非超時。 意味著:
- 目標 IP 可達(路由通),但
- 目標埠(預設 873/22)無程式監聽,或
- 防火牆/TCP Wrappers 發送拒絕回應。
分級排查步驟
1. 確認網路通達性
ping 192.168.1.118
# 若不通 → 檢查 IP、子網路、虛擬網卡、VPN
2. 確認 Windows 端 rsync 服務運行狀態
Windows 通常透過 cwRsyncServer 或 Git for Windows / MSYS2 / Cygwin 提供 rsync daemon:
- 服務管理器 → 搜尋 "RsyncServer" / "cwRsync" → 狀態應為「運行中」。
- 或命令列:
netstat -an | findstr :873 應顯示 `LISTENING`。
- 若未安裝/未啟動 → 安裝 cwRsyncServer,設定 `rsyncd.conf`,啟動服務。
3. 若走 SSH 隧道(rsync -e ssh),確認 SSH 服務
- Windows 10/11 可啟用「OpenSSH Server」選用功能,或安裝 Git for Windows 含 SSH Server。
netstat -an | findstr :22 確認 22 埠監聽。
- 測試:
ssh user@192.168.1.118 能否登入。
4. 防火牆規則(最常見遺漏)
| 防火牆類型 | 操作 |
| Windows Defender 防火牆 | 新增輸入規則:允許 TCP 873 (rsync) / 22 (SSH),配置檔:專用/網域 |
| 第三方殺毒/防火牆 | 同樣放行對應埠,或暫時關閉測試 |
| Cygwin/MSYS2 內部 | 檢查 `/etc/hosts.allow` / `hosts.deny` (TCP Wrappers) |
5. rsyncd.conf 關鍵設定檢查
[test]
path = /cygdrive/d/test
read only = false
list = yes
auth users = rsyncuser
secrets file = /etc/rsyncd.secrets
hosts allow = 192.168.1.0/24
hosts deny = *
hosts allow 必須包含客戶端 IP/網段。
path 路徑在 Cygwin 掛載點下正確(`/cygdrive/d/test`)。
6. 測試連線
# 測試 daemon 模式
rsync rsync://192.168.1.118/test
# 測試 SSH 模式
rsync -e ssh -avz test/ user@192.168.1.118:/cygdrive/d/test
替代方案建議
- WinSCP / FileZilla (SFTP):圖形化、支援斷點續傳、腳本自動化。
- Syncthing / Resilio Sync:P2P 即時同步,無需集中伺服器。
- robocopy (Windows 原生):配合排程任務單向鏡像,`robocopy \\linux\share D:\test /MIR /R:2 /W:5`。
總結檢查清單
- ✅ IP 通(ping)
- ✅ 目標埠監聽(netstat -an | findstr :873 或 :22)
- ✅ 防火牆放行對應埠
- ✅ rsyncd.conf / sshd_config 允許客戶端 IP、認證正確
- ✅ 路徑在 Cygwin/WSL 掛載點下存在且可寫
逐項排查,多數情況在第 2、4 步解決。
- 上一篇文章: Android 實現複雜懸浮/吸頂導航效果:協調器佈局與自定義滾動行為
- 下一篇文章: Oracle 資料庫入門:建表、插入與查詢完整範例
Copyright ©
程式碼之家 All Rights Reserved