古いサーバーから新しいサーバーにユーザーハッシュを検索して置き換えます。

古いサーバーから新しいサーバーにユーザーハッシュを検索して置き換えます。

以前のサーバーで行ったように、新しいサーバーにも同じパスワードを設定する必要があることがよくあります。シャドウから手動でハッシュを貼り付けることもできますが、これを自動的に行う方法を学びたいと思います。

old machine A
new machine B

新しいコンピュータBにはAのユーザーがいますが、Aには存在しない他のユーザーもあります(シャドウは並べ替えられず、もちろんスキップできます)。

sed/awkで次のことを行う方法はありますか?

マシンAからハッシュを取得し、新しいマシンBにパスワードが設定されていない既存のユーザーを置き換えます。 (xxx:!:xxxx)

答え1

awk 'BEGIN{ OFS=FS=":" }
{
  if (NR==FNR) {
    pwd[$1]=$2
  } else {
    if ($2 ~ /^!/ && $1 in pwd) $2=pwd[$1]
    print
  }
}' shadowA shadowB

shadowA最初のファイル()を処理するときに、ユーザー名でインデックス付けされた配列NR==FNRにパスワードハッシュを保存します。pwd

shadowB2番目のファイル(else)が処理され、2番目のフィールドがa(または可能!性があります)で始まり、ユーザー名がパスワードの配列()に表示されたら、2番目のフィールドの値を更新します。次に現在の行を印刷します。!!!$1 in pwdshadowB

関連情報