sudo
私のシステム管理者が特定のスクリプトを実行するためにそれを使用するように要求しました。スクリプト(引数として渡したサブコマンドによって異なります)はsshキーを使用して他のコンピュータに接続しますが、これは失敗します。おそらく私の代わりにrootとして実行されるからです。
sudo
コマンドの実行中にSSHキーにアクセスしながらスクリプトを実行する権限を取得するには、システム管理者が必要とし、変更する権限がないこの権限をどのように使用できますか?
答え1
sudoの設定方法によっては、ほとんどの環境変数をオーバーライドできます。特に、隠す可能性が高くSSH_AUTH_SOCK
、隠す可能性が高いですHOME
。 sudo構成を変更しないと、この問題は解決できません。
rootで実行すると、sudo設定(特に保存されている環境変数)を表示できますsudo -V
。権限のないユーザーは構成を表示できない機能です。
システム管理者は、スクリプトがSSHキーを使用できないようにsudo権限をロックしている可能性があります。これはおそらくセキュリティポリシーであり、正しく実装されている場合は定義に従って直接変更できないため、構成を変更するにはシステム管理者が必要です。
スクリプトの機能とsudo設定が何であるかわからない場合は、何が必要かを知ることは困難です。次の行が役に立ちます(sudoers
実行するコマンドが次の場合に環境変数を保存するようにsudoに指示します)。SSH_AUTH_SOCK
/path/to/script
Defaults!/path/to/script env_keep+=SSH_AUTH_SOCK
スクリプトが自分またはroot以外のユーザーとして実行されている場合は、そのユーザーにキーを読み取るか、エージェントにアクセスする権限を付与する必要があります。
答え2
二つが浮かび上がる。まず、高い特権が必要なコマンドでのみ実行されるようにスクリプトを編集しますsudo
。これにより、SSH接続が正しく機能します。これには、必要なコマンドだけが高い権限で実行できるという利点があります。正しいタスクを実行するために、スクリプトの呼び出しsudo
に依存してコマンドラインからコマンドを実行する必要はありません。sudo
次に、接続するユーザーの名前を明示的に設定するようにスクリプトを編集します。$SUDO_USER
現在のセッションを開始したユーザーのユーザー名を保持するこの変数を使用できますsudo
。これにより、トリックを実行できます。
ssh "${SUDO_USER}@remotehost.example.com"
答え3
ユーザーIDは常にsudoに変更されますが、-Eパラメーターを使用して環境を保存できます。