Ssh
如何使用受限權限同步遠端文件?
我試圖
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。