如何以提升的權限遠端執行 shell 腳本
我有兩台伺服器,serverA和serverB。
目前,我在serverA上執行一個 shell 腳本,該腳本創建一個文件並將其*“推送”*到serverB。shell 腳本每小時以 cron 的形式執行,並且需要
SUDO
特權。但是,由於我們設置的更改,我不能再將文件從serverA *‘推送’*到serverB,而是我現在需要將文件從serverB *‘拉’*到serverA。
是否有*“正確”的*方式連接到遠端伺服器並執行需要提升權限的腳本?但不必在serverB上的 shell 腳本中寫下密碼?
你有一些選擇。以下是一些建議:
- 使用基於證書的身份驗證從 serverB 連接到 root@serverA 並在該伺服器的根上下文中執行腳本。
scp
然後,您可以使用相同的基於證書的身份驗證來使用或拉回生成的文件rsync
。不利的一面是,您在 serverB 上的帳戶可以完全不受限制地訪問 root@serverA。但是,在嚴密管理的環境中,這可能是可以接受的。 2. 使用基於證書的身份驗證從 serverB 連接到 root@serverA,該身份驗證將連接限制為執行單個命令 - 您的腳本。如果命令要將其文件輸出到標準輸出,則可以直接從
ssh
從 serverB 到 root@serverA 的會話中擷取它,而無需在腳本完成後傳輸文件。您在 serverB 上的帳戶將無法任意訪問 root@serverA。
~root/.ssh/authorized_keys
root@serverA 在其文件中執行命令的必要條目範例bake
可能如下所示:ssh-rsa AAAAB3Nza...Fr9FvN me@roaima,command="/usr/local/bin/bake",no-agent-forwarding,no-port-forwarding,no-X11-forwarding
- 從 serverB 連接到 serverA,並用於
sudo
執行腳本。您可以配置sudo
為允許您的單個使用者帳戶以 root 身份執行腳本,但不需要密碼。此條目
/etc/sudoers
將允許使用者“roaima”使用以下命令以 root 身份執行帶或不帶參數的命名腳本sudo /usr/local/bin/bake --fruit=apple,blackberry --type=pie
roaima ALL = NOPASSWD: /usr/local/bin/bake
- 使用觸發器的更複雜的事情,例如連接到 serverA 上定義的 TCP 埠並觸發您的腳本,以 root 身份執行。
這確實意味著任何可以訪問 serverA 上的 TCP 埠的人都可以啟動您的腳本,因此您需要考慮 DDOS 問題並防止腳本的多個實例同時執行。但是,它將消除對 serverA 上的任何
sudo
互動式 root 訪問權限的需要——即使是使用.