![パスワードなしで通常のユーザーとして su するにはどうすればいいですか?](https://rvso.com/image/1502916/%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%81%AA%E3%81%97%E3%81%A7%E9%80%9A%E5%B8%B8%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%A8%E3%81%97%E3%81%A6%20su%20%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%81%84%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
誰かが私のスクリプトを手伝ってくれるかどうか知りたいです。
サーバーが 2 台あります。サーバー A とサーバー B と呼びます。サーバー B には、サーバー A から実行したいソフトウェアがインストールされています。サーバー A にソフトウェアをインストールできません。
ユーザーがサーバー A で別のソフトウェアを実行できるようにし、そのソフトウェアがスクリプトを呼び出してサーバー B のソフトウェアを呼び出してコマンドを実行できるようにする必要があります。
そこで、サーバー A とサーバー B に transfer というユーザーを作成しました。認証キーを使用して、transfer がパスワードを必要とせずにサーバー B に ssh で接続できるようにしました。
そこで、サーバー A から su として転送し、サーバー B に ssh してコマンドを実行しようとしています。
これは、root としてはまったく問題なく動作します。ただし、私自身または他のユーザーの場合、サーバー B の「転送」ユーザーのパスワードを求められます。
コマンドシーケンスは次のとおりです。
#!/bin/bash
su transfer -c 'ssh transfer@ServerB script $1 $2'
答え1
リモート コマンドを実行するシェル スクリプトを作成します。
% 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
root として、次の/etc/sudoers
コマンドを実行してファイルに以下を追加しますvisudo
。
%transfer serverA = (transfer) NOPASSWD: /home/transfer/exec-remote-sw
転送グループのユーザーの 1 人としてログインし、次のコマンドを実行してテストします。
% 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
リモート プロセスは、渡された 2 つのパラメータを使用して実行される必要があります。