![如何在沒有密碼的情況下以普通用戶身份蘇?](https://rvso.com/image/1502916/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%B2%92%E6%9C%89%E5%AF%86%E7%A2%BC%E7%9A%84%E6%83%85%E6%B3%81%E4%B8%8B%E4%BB%A5%E6%99%AE%E9%80%9A%E7%94%A8%E6%88%B6%E8%BA%AB%E4%BB%BD%E8%98%87%EF%BC%9F.png)
我想知道是否有人可以幫我編寫腳本。
我有 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
並且遠端進程應該在傳遞兩個參數的情況下執行。