Linux(debianベース)サーバーがあり、ユーザー「root」ではなく、ユーザー「admin」へのSSHセッションを許可するように設定されています。これらのアカウントは両方とも同じパスワードを共有しているため、何らかの形でリンクされています。
管理者としてのSSHセッション中に、ユーザー「root」に切り替えない限り、コマンドを実行するには「Sudo」が必要です。
時々、またはシステムの起動時に実行する必要があるサービスがいくつかあります。私は現在、サーバーでコマンドをリモート実行するために秘密鍵/公開鍵メカニズムを使用しています。一部のコマンドは手動で入力されますが、他のコマンドは私が実行するシェルスクリプトです。現在、コマンドがSudoを使用している場合、サーバーは引き続きパスワードを要求します。
質問:パスワードを入力せずにユーザー「admin」としてリモート実行するにはどうすればよいですか? sudoを満たすために秘密鍵/公開鍵を使用することは可能ですか?それとも、ユーザー「root」としてシェルスクリプトを開始する方法ですか?
Sudoを使用してパスワードを入力する必要を回避することもできますか?そうでない場合、それらは私のような状況に対する他の選択肢ですか?
sudoにコマンドのパスワードをスキップするように指示できます。
例えば/etc/sudoers
archemar ALL = (www-data) NOPASSWD: /bin/rm -rf /var/www/log/upload.*
これにより、
Sudo -u www-data /bin/rm -rf /var/www/log/upload.*
パスワードなしのアーキマーとして。
ご了承ください
Sudo -u www-data rm -rf /var/www/log/upload.*
rm
は/bin/rm
と異なるため、機能しません(パスワードを要求します)。
必ずvisudo
コマンドを使用して/etc/sudoers
を編集してください。
上級レベルに達したら、/etc/sudoers.d
に独自のSudoファイルを作成することをお勧めします。
最も簡単な方法は、stdin
がパスワードをサポートしている場合、Sudo
からパスワードを提供することです(-Sキー)
ssh -t admin@remotehost "echo <yourpassword> |Sudo -S <yourcommand>"
アカウントが何らかの方法でリンクされている場合、一方にSSHを許可し、もう一方に許可しないことは意味がありません。これが代わりに私がすることです:
authorized_keys
に実行する必要のあるキーとコマンドを入力します。これにより、このキーで接続が確立されるとすぐにコマンドが起動します。この方法では、呼び出し元はシェルを作成することも、他のコマンドを実行することもできません(たとえ提供されたとしても)。
ここで例を見ることができます: https://stackoverflow.com/questions/402615/how-to-restrict-ssh-users-to-a-predefined-set-of-commands-after-login = command=
構文。キーの代わりに証明書を使用する場合、または構成オプションForceCommand
を使用してグローバルに実行する場合は、コマンドを証明書に埋め込むことによって同じことを行うこともできます。
別の例については http://larstobi.blogspot.com/2011/01/restrict-ssh-access-to-one-command-but.html を参照してください(考慮に入れる必要があることを示しています)コマンドのパラメーター)
TouchIDを備えたMacBookを使用している場合は、Mac TouchIDを使用してSSH Sudoを構成できます(指紋、2FA)
Archemarの回答に追加するために、Sudo
は、コマンドを実行するユーザーではなく、Sudo
を実行しているユーザーのパスワードを要求します。 「admin」アカウントと「root」アカウントは「リンク」されており、同じパスワードを共有するとします。 「admin」アカウントのパスワードを受け入れるSudo
に基づいてこの結論に達した場合(および「admin」のパスワードが変更されたときにパスワードSudo
が変更を受け入れる)、これは正常ですSudo
の動作。