
我想知道是否有人可以幫我編寫腳本。
我有 2 台伺服器。我們將它們稱為伺服器 A 和伺服器 B。
我必須讓使用者在伺服器 A 中執行另一個軟體,然後該軟體將呼叫一個腳本來呼叫伺服器 B 中的軟體來執行命令。
因此,我在伺服器 A 和伺服器 B 上建立了一個名為 Transfer 的使用者。
所以現在從伺服器 A 我嘗試 su 作為傳輸,ssh 到伺服器 B 並運行命令。
這作為 root 運行得非常好。但是,當我是我自己或任何其他使用者時,它會要求我輸入伺服器 B 上「傳輸」使用者的密碼。
這是命令序列:
#!/bin/bash
su transfer -c 'ssh transfer@ServerB script $1 $2'
答案1
建立執行遠端命令的 shell 腳本:
% cat > /home/transfer/exec-remote-sw <<EOF
#!/bin/bash
ssh transfer@ServerB script $1 $2
EOF
% chmod 755 /home/transfer/exec-remote-sw
透過以使用者身分執行該腳本來測試該腳本transfer
:
% /home/transfer/exec-remote-sw arg1 arg2
現在,以 root 身分建立一個 Linux 群組(例如transfer
),然後將需要存取此功能的所有使用者新增至該 Unix 群組:
% groupadd transfer
% usermod -a -G transfer login1
% usermod -a -G transfer login2
...
% usermod -a -G transfer loginN
/etc/sudoers
以 root 身份,透過執行以下命令將以下內容附加到文件中visudo
:
%transfer serverA = (transfer) NOPASSWD: /home/transfer/exec-remote-sw
透過以傳輸群組中的使用者之一登入並執行來進行測試:
% sudo -u transfer /home/transfer/exec-remote-sw arg1 arg2
為了為您的用戶簡化此操作,請讓他們將以下內容新增至其 .profile 檔案(或將其新增至每個人的 /etc/profile 中):
alias svrbexec="sudo -u transfer /home/transfer/exec-remote-sw"
然後使用者可以輸入:
% svrbexec arg1 arg2
並且遠端進程應該在傳遞兩個參數的情況下執行。