Ssh

如何使用受限權限同步遠端文件?

  • February 11, 2020

我試圖rsync通過ssh一個遠端的“使用者”來歸檔,該使用者甚至沒有讀取它們的權限。

例如 file.conf 是:

root:root rwxr-----   

這些情況的最佳做法是什麼?

  • 將“使用者”組分配給 file.conf (root:user)?
  • 把我的使用者放在’root’組?
  • 把’r’給別人?
  • ssh 與“root”?

如果您不想以 root 身份使用 ssh,我建議您使用tar而不是rsync

[source-host ~]$ sudo tar -pzc /etc/exim4 |ssh target-host "cat > exim4.tar.gz"
[target-host ~]$ cd /etc; sudo tar -pzxf ~/exim4.tar.gz

這將創建 /etc/exim4 目錄的壓縮 tar 存檔,但不是將其寫入本地磁碟,而是通過 ssh 連接發送到遠端主機並以exim4.tar.gz. 第二個命令應該在該目標系統上執行。以 root 身份轉到/etc並解壓縮該存檔。

Like rsync -a,tar -p將確保您的權限(以及所有者和時間戳)相同,儘管某些帳戶的 UID 和 GUID 可能已關閉(例如,某些文件可能由“exim”帳戶擁有,新帳戶的標識符可能略有不同系統)。如果它們存在,您必須進入並手動更正它們。

這需要一個額外的步驟,因為您必須在sudo沒有密碼的情況下遠端執行。

[source-host ~]$ echo "ftg ALL=(ALL) NOPASSWD: /bin/tar -pzc /etc/exim4" |sudo tee -a /etc/sudoers.d/tar-exim
[target-host ~]$ cd /etc; ssh ftg@source-host "sudo tar -pzc /etc/exim4" |sudo tar -pzx

在源主機上,這允許您在沒有密碼的情況下執行非常特定sudo的命令(出於安全目的,不允許對命令進行任何更改)。這是永久性的,因此您只需執行一次(如果您不希望它永遠存在,請刪除該行)。

然後,目標主機可以從源主機拉取配置,在本地創建壓縮存檔,通過 ssh 流式傳輸,並以 root 身份在本地取消存檔。

第一步可能是不必要的,您可以將ssh命令作為ssh -t …. ssh手冊頁描述-t

-t 強制偽終端分配。這可用於在遠端機器上執行任意基於螢幕的程序,這非常有用,例如在實現菜單服務時。多個-t 選項強制 tty 分配,即使ssh沒有本地 tty。

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