Ssh

在 SSH 上使用 Unison / rsync 同步需要完整文件系統訪問但禁用 root 登錄的站點

  • July 2, 2018

假設兩個站點AB在兩端都有文件伺服器。的內容/storage應該在站點之間同步,保留所有權和權限。沒有一個包羅萬象的組,該組擁有/storage. 如果執行 Unison 或 rsync pid=0,則進行同步很簡單。但是 SSH 將用作傳輸,並且出於顯而易見的原因,兩端都禁用了 SSH root 登錄。

如何使 A 和 B 與在這種情況下保留的所有權限保持同步。我能想到的兩種方法:

  • 執行允許 root 登錄但只能通過 A 和 B 之間的 VPN 連接的輔助 SSH。

  • 添加一個特殊的同步使用者 sshd 配置強制執行一個

    • Unison 或 rsync 的 SUID 包裝器(正確操作很危險)。
    • sudoUnison 或 rsync 的包裝器

對問題遠端使用 root over ssh for unison給出的答案建議通過 SSH 啟用無密碼 pubkey root 登錄——我不太喜歡這種解決方案。

還有其他想法嗎?

通過 SSH 的公鑰 root 登錄可能是您最好的選擇。您還可以將此訪問權限限制為單個主機:

AllowUsers root@192.0.2.123

甚至使用該Match指令來獲取給定事物(地址、使用者等)的唯一配置:

Match Address 192.0.2.123
   PasswordAuthentication no
   RSAAuthentication yes
   PubkeyAuthentication yes
   PermitRootLogin yes

如何以 root 身份執行遠端 unison 實例:

遠端

  • 不要碰你的 sshd 配置,尤其是不要創建任何特殊的同步$$ ssh $$如您在問題中所述的使用者
  • 創建 sudo 包裝器vi sunison
#!/data/data/com.termux/files/usr/bin/bash
su --preserve-environment -c `which unison` "$@"

(是的,這是針對 Termux 環境的,根據您的需要進行簡化)

客戶端

  • -servercmd sunison
  • 或添加到您的同音檔案servercmd = sunison

筆記

  • 類似的東西servercmd = sudo unison是最好的,但它對我不起作用

引用自:https://serverfault.com/questions/685099