Debian

如何以提升的權限遠端執行 shell 腳本

  • October 28, 2015

我有兩台伺服器,serverAserverB

目前,我在serverA上執行一個 shell 腳本,該腳本創建一個文件並將其*“推送”*到serverB。shell 腳本每小時以 cron 的形式執行,並且需要SUDO特權。

但是,由於我們設置的更改,我不能再將文件從serverA *‘推送’*到serverB,而是我現在需要將文件從serverB *‘拉’*到serverA

是否有*“正確”的*方式連接到遠端伺服器並執行需要提升權限的腳本?但不必在serverB上的 shell 腳本中寫下密碼?

你有一些選擇。以下是一些建議:

  1. 使用基於證書的身份驗證從 serverB 連接到 root@serverA 並在該伺服器的根上下文中執行腳本。

scp然後,您可以使用相同的基於證書的身份驗證來使用或拉回生成的文件rsync。不利的一面是,您在 serverB 上的帳戶可以完全不受限制地訪問 root@serverA。但是,在嚴密管理的環境中,這可能是可以接受的。 2. 使用基於證書的身份驗證從 serverB 連接到 root@serverA,該身份驗證將連接限制為執行單個命令 - 您的腳本。

如果命令要將其文件輸出到標準輸出,則可以直接從ssh從 serverB 到 root@serverA 的會話中擷取它,而無需在腳本完成後傳輸文件。您在 serverB 上的帳戶將無法任意訪問 root@serverA。

~root/.ssh/authorized_keysroot@serverA 在其文件中執行命令的必要條目範例bake可能如下所示:

ssh-rsa AAAAB3Nza...Fr9FvN me@roaima,command="/usr/local/bin/bake",no-agent-forwarding,no-port-forwarding,no-X11-forwarding
  1. 從 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
  1. 使用觸發器的更複雜的事情,例如連接到 serverA 上定義的 TCP 埠並觸發您的腳本,以 root 身份執行。

這確實意味著任何可以訪問 serverA 上的 TCP 埠的人都可以啟動您的腳本,因此您需要考慮 DDOS 問題並防止腳本的多個實例同時執行。但是,它將消除對 serverA 上的任何sudo互動式 root 訪問權限的需要——即使是使用.

引用自:https://unix.stackexchange.com/questions/239024