「admin」ユーザーにはSSHセッションを許可しますが、「root」ユーザーにはSSHセッションを許可しないように構成されたLinux(debianベース)サーバーがあります。両方のアカウントは同じパスワードを共有するため、何とかリンクされます。
管理者としてSSHセッション中に「root」ユーザーに切り替えない限り、コマンドを実行するには「sudo」が必要です。
システムの起動時にも時々実行する必要があるいくつかのサービスがあります。私は現在、プライベート/公開鍵メカニズムを使用してサーバーからリモートでコマンドを実行しています。いくつかのコマンドは手動で入力され、他のコマンドは私が実行したシェルスクリプトでした。現在のコマンドがsudoを使用している場合、サーバーはまだパスワードを要求します。
Q:パスワードを入力せずに「admin」ユーザーとしてリモートでそれを実行するにはどうすればよいですか? sudoの要件を満たすためにプライベート/公開キーを使用できますか?それとも、ユーザー「root」でシェルスクリプトを起動する方法はありますか?
sudoを使ってパスワード入力を避けることはできますか?そうでなければ、私のような状況には他にどのようなオプションがありますか?
答え1
特定のコマンドに対してパスワードをスキップするように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.*
パスワードのないArchemarを使って。
気づく
sudo -u www-data rm -rf /var/www/log/upload.*
(*)rm
のため動作しません(パスワードを求めます)。/bin/rm
編集するにはコマンドを/etc/sudoers
使用してください。visudo
高度なレベルに達すると/etc/sudoers.d
。
(*)最新のオペレーティングシステム(2022年頃のredhat 7.x)のこれらの変更により、rm
パスが一致した場合に使用できます。/bin/rm
sudoers.conf
rm
答え2
stdin
最も簡単な方法は、サポートしている場合はパスワードを提供することですsudo
(-Sキー)
ssh -t admin@remotehost "echo <yourpassword> |sudo -S <yourcommand>"
答え3
アカウントが何らかの方法でリンクされている場合、あるアカウントにSSHを許可し、他のアカウントに許可しないことは意味がありません。私がすることは次のとおりです。
- パスワードではなくSSHキーでのみアクセスを許可するルート用のSSHを有効にします。
- 特定のコマンドでのみ使用する新しいキーを作成します。
- 実行する必要があるキーとコマンドを
authorized_keys
ルートに配置すると、キーに接続するとコマンドが実行されます。
これは、呼び出し側がシェルを持つことができず、他のコマンドを実行できないため安全です(彼がシェルを提供しても)。
ここで例を見ることができます。https://stackoverflow.com/questions/402615/how-to-restrict-ssh-users-to-a-predefine-set-of-commands-after-loginそしてcommand=
文法。キーの代わりに証明書を使用している場合は、コマンドを証明書に含めて同じ操作を実行することも、構成オプションを使用してグローバルに実行することもできます。ForceCommand
バラよりhttp://larstobi.blogspot.com/2011/01/restrict-ssh-access-to-one-command-but.html別の例(コマンドのパラメータを考慮する必要があることを示しています)
答え4
Archemarの回答に追加するには、コマンドを実行しているsudo
ユーザーのパスワードではなく、実行中のユーザーのパスワードを入力してください。sudo
「admin」と「root」のアカウントが「接続」されており、同じパスワードを共有すると言います。sudo
「admin」アカウントのパスワードを受け入れること(およびsudo
「admin」のパスワードが変更されたときに変更されるパスワードを許可するパスワード)に基づいてこれらの結論に達した場合、これは正常な動作ですsudo
。