私はシェルスクリプトを書いていますが、複数のUnixサーバーでサービスの再起動プロセスを自動化したいと思います。私は通常のユーザーとしてサービス再起動コマンドを実行する権限がありません。ただs_user実行する権限があります。
サービスを再起動する手順:
- 私のユーザー名とパスワードを使用してサーバーにログインします。
再起動サービスを実行するには、次のようにユーザーをs_userに切り替える必要があります。(パスワードを要求せずにこのコマンドが必要です)
sudo su - s_user
上記のコマンドは、サービスを再起動するために提供するパスワードの入力を求めます。すべてのサーバーでこのプロセスを実行する必要があります。標準入力を介してsuにパスワードを提供して、パスワードプロンプトをスキップしたいと思います。
これまで、次のコマンドを試しました。
1. echo 'password'|sudo -S su -c " .../bin/services stop"
Output:
[sudo]password for abc.xyz: Sorry, user abc.xyz is not allowed to execute '/bin/su - s_user' -c /bin/services stop' as root on [Servername]
上記のコマンドでパスワードを入力しました。 s_userパスワードも提供しようとしましたが、次のような結果が表示されます。
[sudo]password for abc.xyz: Sorry,try again.
[sudo]password for abc.xyz:
sudo:pam_authenticate:Conversation error
以下のコマンドで「su」を「u」に変更しましたが、まだ最初のコマンドと同じ出力エラーが発生します。
2. echo 'password'|sudo -S u -c " .../bin/services stop"
以下のコマンドにs_userを指定しましたが、まだ最初のコマンドと同じ出力エラーが発生しました。
3. echo 'password'|sudo -S su - s_user -c ".../bin/service stop"
次に、次のコマンドを試しました。
4. echo 'my password'|su -c ".../bin/services stop" -s /bin/sh abc.xyz
Output:
Standard in must be a tty
私も次のコマンドを試しました。
5. su -c "command_to_restart_the_services" -s /bin/sh abc.xyz
コマンドを正常に実行できます。
6. echo password|sudo -S su - user-to-switch
sudo -S su - user-to-switch
上記のコマンドにはまだパスワードが必要です。
限界:
•使用できません「予想される」、私のコンピュータにインストールされていません。
• 変更できません。「スダエル」文書。私は権利を持っていません。
答え1
sudo
あなたはルートになった次のものをsu
使用しているようですs_user
。これには(のsudo
)パスワードを使用します。パスワードは必要ありませんs_user
。
アカウントにSSHキーを追加することでこれを行うことができますが、s_user
この場合、ソリューションは次善策だと思います。
一番最初に指摘したいのは必ずしもそうする必要もなくsu
、使わない方が良いという点だ。だからしないsudo su - s_user -c command
でくださいsudo -u s_user command
。それでもパスワードを入力するように求められます。ただし、今すぐ設定できます。/etc/sudoers
次のファイルを追加します/etc/sudoers.d/s_commands
(ただし確認済み/usr/bin/visudo
)。
Cmnd_Alias S_COMMAND=/usr/bin/command, /usr/bin/anotherCommand
%s_group ALL = (s_user) NOPASSWD : S_COMMAND
これにより、s_userとしてこれらのコマンドをパスワードなしで使用できますが、s_groupグループ(追加する必要がある)のユーザーのみが使用できます。
次に、シェルエイリアスを設定します(例:)alias s_command="sudo -u s_user command"
。
メモ:
su
切り替えたいユーザーのパスワードを取得します。sudo
デフォルトでは、切り替えたいユーザーのパスワードが使用されます。sudo
パスワードはstdinで読み込まず、ttyで読み込まれます。
答え2
1つの方法はsshを使用することです。
ssh-copy-id を使用すると、認証を保存できます。
ssh-copy-id [email protected]
(キーが設定されていない場合はssh-keygen
キーを生成するために使用されます)
次に、sudoを代わりに使用して、ssh
パスワードプロンプトなしでコマンドを実行できます。
ssh [email protected] " .../bin/services stop"
答え3
これはあなたの問題に対する正確な答えではありませんが、あなたの仕事に対する解決策かもしれません。
私はあなたが各サーバーのs_userのパスワードを知っていて、sshd
そのパスワードがそのサーバーにインストールされていると仮定します(そして期待どおりに動作します。サーバー上で実行されているOSによって異なります)。
〜のようにプロモーションネット上記のようにsshを使用できますが、サーバーにログインするために自分の資格情報を使用する必要はありません。
コンピュータから:
まずssh-keygen
。デフォルトでは、これは ~/.ssh ディレクトリに保存されます。
次に、関連するサーバーコールごとに、ssh-copy s_user@<server>
サーバーのs_userのパスワードを入力するように求められます。
今、すべてがうまくいっていることを確認してみてくださいssh s_user@<server>
。パスワードを入力しなくてもこれを行うことができます。
これで、スクリプト(ローカルコンピュータ)から次を呼び出すことができます。
ssh s_user@<server> "whatever-command-you-need-to-run"
パスワードは必要ありません。
A:あなたのローカルコンピュータもUN * Xに似たオペレーティングシステムを実行しているとします。 Windowsを実行している場合は、Windowsパッケージに付属のプログラムを使用できますputty
。