異なるルートパスワードを持つ60のシステムがあります。
3ヶ月ごとにパスワードを変更する必要があります。
現在、私は60のシステムに手動でログインし、60の異なるパスワードを考えなければなりません。
これを行う賢明な方法はありますか? Ansibleを使用してこの種の操作を実行できますか?
答え1
これを行う1つの方法は次のとおりです。
ホスト名とプレーンテキストのルートパスワードを含むテキストファイル(*)を作成します。必要なフィールド区切り記号を使用してください。タブも大丈夫です。
makepasswd
理想的には、または同じプログラムを使用してpwgen
十分な長さと複雑さのパスワードを生成することです。 IMOでは、今すぐ使用を検討する必要がある最小値は16文字です。長いほど良いです。たとえば、にホスト名のリスト(1行に1つ)がある場合は、
hosts.txt
次のように使用します。#!/bin/bash rm -f passwords.txt while read -r host ; do printf "%s\t%s\n" "$host" "$(pwgen -r \''`$' -y -c -n 32 1)" >> passwords.txt done < hosts.txt
-r
(以下に示す一重引用符、バックティック、および$をパスワードに使用するのを防ぐために使用されます。ssh
以下に示す一重引用符で囲まれた文字列内の二重引用符コマンドでこれを処理することはPITAになるためです。例を実行してください:
$ ./generate-passwords.sh $ cat passwords.txt host1 >?Mg^un=-Ipd8ZkY^TUC,_Gf/PAs%=9t host2 XS4?oZ@[+U\,(XeYOBcp{E^Q;!]2]ex< host3 SfupD}=a\J;}TJqqX.r}Kj;ab>Z|\=S2
このリストが必要です。そうしないと、リモートコンピュータのパスワードが何であるかがわからないためです。
ssh
各ホストに移動してchpasswd
パスワードを設定するために使用します。リモートシステムのプロセスリストにパスワードがプレーンテキストで表示されないようにするには、使用オプションを使用してopenssl passwd
ローカルchpasswd
システムのパスワードを事前に暗号化します-e
(これは、システムの唯一のユーザーである場合にのみ「安全」です。という単語の定義はかなり制限されています。この例ではハッシュ-6
オプションを使用していますSHA-512
。#!/bin/bash while IFS=$'\t' read -r host pass; do enc=$(printf "%s" "$pass" | openssl passwd -6 stdin) ssh "$host" "echo 'root:$enc' | chpasswd -e" done < passwords.txt
本当にシンプルで原始的です。エラーチェックはありません。または録音してください。ただしpwgen
、、、openssl
などの既存のツールを使用してchpasswd
パスワードを自動的に変更する方法に関する基本的なアイデアを示します。
私は大学の学期ごとに同様のスクリプトを使用して、特定のコンピュータ(メインネットワークから隔離された)へのシェルアクセスを必要とする特定のコースの新入生のためのパスワードを生成しました。リストは印刷され、切り捨てられ、各ユーザーにはIDが公開されたときにパスワードが与えられます。これは完璧ではありませんが、誰もが知っている基本的な「パスワード」を持つよりもはるかに優れています。
明らかに、ほとんどの場合、パスワードをまったく使用せずに認証されたSSHキーを使用してリモートシステムにログインします。ただし、rootパスワードはコンソールにログインするとき(またはBMCまたは他の使用にはまだ便利です)リモートログイン)。 - 施設管理)を通じて緊急状況に対処できます。
(*)このpasswords.txt
ファイルはプレーンテキストなので、権限とアクセス権限には非常に注意する必要があります。ただし、これは主にこのQ&Aの範囲外です。
chmod 600
ファイルを暗号化するには、次の方法を使用することをお勧めします。GPG- 必要なときだけ復号化してください。またgit
、何らかの理由で特定のホストでパスワードの更新が失敗した場合(たとえば、その時点でオフラインになった場合)、以前のパスワード履歴を失わないように、暗号化されたバージョンまたは他のリビジョン制御システムを維持することをお勧めします。努力する)
または使用渡すgpg
とを組み合わせますgit
。