![SSH ルートから Linux ルート パスワードを確認するにはどうすればいいですか?](https://rvso.com/image/154443/SSH%20%E3%83%AB%E3%83%BC%E3%83%88%E3%81%8B%E3%82%89%20Linux%20%E3%83%AB%E3%83%BC%E3%83%88%20%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%81%84%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
リモートマシンのルートパスワードを確認するにはどうすればよいですか?
通常、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 ユーザーで同じことを実行しようとすると、行き詰まってしまいます。リモート マシンに root として ssh でログインしただけなので、sudo -S ls /root は常にパスワードを含むリストを返します。
ユーザーとして ssh で接続すると、sudo によってユーザーのパスワードが要求されます。
私は、su user && su root を使用して何かを取得しようとしましたが、root パスワードの入力を求めるプロンプトが表示されることに気付きましたが、上記のようなスクリプトを作成できませんでした。
ルート シェルからの「login root」でも常にパスワードの入力を求められますが、これにクリアテキスト パスワードをスクリプト化することもできません。
私はこの質問を読みましたが、リモート マシンにインストールする必要があるカスタム アプリケーションを作成するのではなく、組み込みの方法でこれを実行できることを期待していました。 Linux でパスワードを確認するにはどうすればいいですか?
答え1
ターゲットマシンでの設定がsudo
オプションである場合は、ユーザーパスワードではなくルートパスワードを要求rootpw
する特定のコマンドを設定できますsudo
。たとえば、ファイルに次の行を追加できます
/etc/sudoers.d/lsrootpw
(sudo
必要に応じてサービスを再起動)。
Defaults!/bin/ls rootpw
こうすることで、root以外のユーザーは、sudo ls
自分のパスワードではなくrootのパスワードを尋ねられるようになります。つまり、次のようにテストすることができます。
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
、make the test、remove lsrootpw
、restart sudo)のシーケンスですべて実行できます。