リモートシステムのルートパスワードを確認するには?
私は通常、SSHルートと他のユーザーを介してアクセスするリモートシステムを持っています。セキュリティのために、中央サーバー上のすべてのキーとユーザーパスワードを定期的に変更するスクリプトがあります。
ルート以外のユーザーの場合、パスワードは次のように更新されます。
ssh -i a_priv_key root@ip "echo 'user:NEWPASS' | chpasswd"
確認してみると本当に変わりました。
ssh -i b_priv_key user@ip "echo NEWPASS | sudo -S ls /root"
ただし、rootユーザーとして同じことを行うには、きつくできません。 sudo -S ls /root は root でリモートシステムに SSH 接続を行うため、常にパスワードを含むリストを返します。
ユーザーとしてSSHにアクセスすると、ユーザーパスワードの入力を求められます。
私はrootパスワードの入力を求められますが、上記のようにスクリプトを書くことができないことがわかったので、su user&&su rootを使用して何かを取得しようとしました。
ルートシェルの「login root」も常にパスワードの入力を求められますが、プレーンテキストのパスワードもスクリプトで書くことはできません。
私はこの質問を読んだが、リモートコンピュータにインストールする必要があるカスタムアプリケーションを書くのではなく、これを行うための組み込みの方法があればと思います。 Linuxでパスワードを確認するには?
答え1
ターゲットマシンに設定できるオプションがある場合は、ユーザーパスワードの代わりにルートパスワードを必要とする特定のコマンドをsudo
設定できます。たとえば、ファイルに次の行を追加できます(必要に応じてサービスを再起動します)。rootpw
sudo
/etc/sudoers.d/lsrootpw
sudo
Defaults!/bin/ls rootpw
これにより、操作を実行しているルート以外のすべてのユーザーに、自分sudo ls
のパスワードの代わりにルートパスワードを求めるメッセージが表示されます。だからあなたはテストすることができます
ssh -i b_priv_key root@ip su user sudo -S ls /root <<< "NEWPASS"
NEWPASS
これはパスワードが正しいかどうかに応じて何らかの方法で発生しますroot
。このテストには、ターゲットにsudoユーザーが必要です。
または、Debianコマンドがある場合は、次のように使用runuser
できますnobody
。
ssh -i b_priv_key root@ip runuser -u nobody -- sudo -S ls /root <<< "NEWPASS"
また、パスワードの精度に応じて、常に2つの異なる結果が生成されます。特に、正しいパスワードを入力すると、そのパスワードがファイルnobody
に存在しないという苦情が発生します。.sudoers
/etc/sudoers.d/lsrootpw
もちろん、全体的に、これはターゲットホストに何かをインストールする必要があるという点でカスタムアプリケーションとは大きく異なりません。一方、これはすべて5つのリモートコマンド(add lsrootpw
、restart sudo
、テスト、削除lsrootpw
、sudoの再起動)を介して実行できます。