web-dev-qa-db-ja.com

ユーザーとしてサーバーを停止/再起動する機能

ユーザーとしてawsEC2サーバーを停止する機能が必要です。私は見つけました https://www.cyberciti.biz/tips/howto-linux-allow-users-to-shutdown-server.html しかし、awsEC2でこの機能が必要であるという事実のためたとえば、静的なホスト名がないので、次のことを試しました。

ubuntu ALL=(ALL:ALL) ALL=/sbin/halt /sbin/reboot

しかし、それは私を手に入れました:

>>> /etc/sudoers: syntax error near line 21 <<<
What now?     
Options are:
  (e)dit sudoers file again
  e(x)it without saving changes to sudoers file
  (Q)uit and save changes to sudoers file (DANGER!)

どうすればこれを正しく解決できますか?

1
BitFreak

AWS CLI を使用している場合、ユーザーとして(インスタンス自体で)実行できます。

aws ec2 reboot-instances --instance-ids $(curl -s http://instance-data/latest/meta-data/instance-id)

インスタンス自体の中からEC2IDを取得する方法については、これを参照してください ディスカッション

実行する前に必要な権限があるかどうかをテストする場合は、--dry-runフラグを含めてみてください。

-ドライラン| --no-dry-run(ブール値)

実際にリクエストを行わずに、アクションに必要な権限があるかどうかを確認し、エラー応答を提供します。必要な権限がある場合、エラー応答はDryRunOperationです。それ以外の場合は、UnauthorizedOperationです。

コンテキストについては、haltshutdownrebootなどの違いについて ディスカッション を参照してください。

2
enharmonic

私はあなたが探していると思います:

_ubuntu ALL=/sbin/halt, /sbin/reboot
_

これは次と同じです。

_ubuntu ALL=(ALL:ALL) /sbin/halt, /sbin/reboot
_

通常、ファイルを最終的な場所に配置する前に構文チェックを実行するため、常にvisudoを使用してsudoers構成を編集する必要があります。

ドキュメント化された例の長いリストを含む完全なドキュメントについては、sudoers(5)のマニュアルページを参照してください。


「この状況からどのように回復するか」という質問で、rootとして直接ログインできない場合は、EC2インスタンスを削除して新しいインスタンスを作成するのが最善の方法です。

3
larsks