複数のサーバーでさまざまなJBossインスタンスを管理するためのBashスクリプトを作成しています。
このスクリプトを使用すると、ユーザーは各インスタンスの状態を確認して停止/開始できます。このスクリプトは/opt
停止/開始セクションにあり、各ディレクトリの下付き文字にパラメータを渡します/jboss/bin
。
停止/停止権限が付与されているユーザーには、すでにアプリケーションユーザー()としてjbossuser
何かを実行する権限があり、他のサーバーにSSHキーが設定されています。この機能の使用には問題はありませんでした。
すべてのユーザー(つまり、アプリケーションユーザーとして実行権限を持たないユーザー)が各インスタンスの状態を確認できるようにしたいと思います。この目的のために、私は以下を持っています:
status() {
pid=$(ssh -q -t jbossuser@${server} "ps -ef | grep "$instance" | grep -wv 'grep\|vi\|vim' | awk '{print \$2}'")
if [ ${#pid} -gt 0 ]
then
echo "$name > ${yellow}ONLINE ${default}PID: $pid"
else
echo "$name > ${red}OFFLINE${default}"
fi
}
スクリプトが次の方法で実行されない場合sudo -u jbossuser ./script.sh
(標準ユーザーはこれを実行できません)、jbossuserのパスワードを求めるメッセージが表示されます。
これらのユーザーがこの特定のコマンドを実行できるようにするには、sudoersファイルに何かを追加する必要があることを知っていますが、何を追加するのかわかりません。私はこれをしました:
user ALL=(jbossuser) NOPASSWD: /usr/bin/ssh
しかし、SSHをいくつかのサーバーとそのコマンドjbossuser
にのみ許可するように制限したいと思います。ps -ef
/編集する:
答え/コメントに基づいて、私がやろうとしていることが何であるか、問題が何であるかをより明確にする必要があるようです。
システム管理者は次のスクリプトを実行します。
sudo -u jbossuser ./script.sh
標準ユーザーはsudoを使用できませんので、次のように実行してください。
./script.sh
この機能を実行している人は、jbossuser
前述の機能を呼び出すオプションを選択することに問題はありません。これは、status()
他のサーバーに接続するために設定されたSSHキーを使用するためです。jbossuser
jbossuser
これらの2人のユーザーは、(標準ユーザー)sshの使用が許可されていないため、パスワードを入力するように求められ、エラーが発生したために実行されませんでした。 SSHを使用できますが、jbossuser
他のサーバーに接続できるSSHキーはありません。
標準ユーザーだけを許可したいです。
sudo -u jbossuser ssh -q -t jbossuser@[hostname] ps -ef | grep [process]
次に、管理者と標準ユーザーの両方に機能するように最初にstatus()
含める機能を更新します。sudo -u jbossuser
答え1
ここで解決しなければならないいくつかの問題があります。
特定のホストにのみアクセスを許可するには?
これは、ソースホストのユーザーに特定のSSH秘密鍵を提供することによって実現できます。次に、一致する公開鍵をインストールします。ただユーザーがアクセスできるホストから。ユーザーがターゲットアカウントのパスワードを知らないか、パスワードの確認が無効になっていることを確認してください
sshd_config
。ユーザーは次のことを行う必要があります。ただSSHキーを介して認証する機能。ユーザーが特定のコマンドのみを実行するように制限する方法は?
これは上記の#1と同様に解決できます。ターゲットサーバーのユーザー
~/.ssh/authorized_keys
ファイルにキーを追加するときにユーザーが強制的に実行するコマンドを指定することもできます。彼らはしますいいえこのコマンドを除くすべての操作を実行できます。
authorized_keys
提供されたコマンド例を使用すると、この機能をサポートするサンプル項目は次のとおりです。
command="ps -ef | grep \"$SSH_ORIGINAL_COMMAND\" | grep -wv 'grep\|vi\|vim' | awk '{print $2}'",no-pty,no-port-forwarding,no-x11 -配信、エージェントレス配信 ssh-rsa AAAADAQABAAAAgQDAkwY/8z8sADor5NmM0rZd3clWIcycSzP1gj1gjZCymuYxXRZX/YFnjphkuCWU7c4KK6AtS4Xv1OFjpqtZ6uc xt 4lJRlv1F8WZkUpy5iUo6VqZbgwywzyiqZj5u100Rcbho4BDFjYbSWOw== jbossuser@source_host
メモ:これは一行でなければなりませんauthorized_keys
!
sshコマンドを実行すると、ユーザーはコマンドラインからgrepしたいプロセスの名前を渡すことができます。以下は使用中の例です。この例では、ps
リストから「crond」プロセスを検索しています。
jbossuser@source_host ~$ ssh -i .ssh/testkey jbossuser@target_host crond
1044
jbossuser@source_host ~$
したがって、このコマンドは「crond」プロセスのPID「1044」を返します。
ソースホストのユーザーへのsudoアクセス
構文は正しいですが、コマンドが正しくありません。 sudo アクセス権を付与するのではなく、
ssh
jbossuser で実行したいスクリプトに対する権限を付与することです。
異なるユーザーが異なるホストにアクセスする必要がある場合は、そのユーザーにのみ対応するSSH秘密鍵を指す異なるバージョンのスクリプトを提供できます。