1

* 簡単な解決策 * タイトルだけに基づいてこのページにアクセスし、以下のすべてを読みたくない場合、または以下のすべてが自分の状況に当てはまらないと考えている場合、これが役立つかもしれません...行うことは、起動時にユーザーのパスワードを変更することであり、Ubuntu 12.04 または同様のものを使用しています。ここで行う必要があるのはすべてです。以下を含む起動時に開始するスクリプトを追加します。

printf "New Password\nRepeat Password\n" | passwd user

これはルートとして実行する必要があることに注意してください。そうしないと、次のように元のパスワードを提供する必要があります。

printf "Original Password\nNew Password\nRepeat Password\n" | passwd user

* 元の質問を開始 *

マウントされた iso からいくつかの構成とファイルのコピーを実行して VM をセットアップする最初のブート スクリプトがあります。基本的に次のことが起こります。

  1. VM が初めて起動します。
  2. /etc/rc.local は、CD ISO を /media/cdrom にマウントし、/media/cdrom/boot.sh を実行するために使用されます。
  3. boot.sh ファイルは、いくつかの基本的な構成を行い、いくつかのファイルを CD から VM にコピーし、現在のパスワードを使用してユーザーのパスワードを更新する必要があります。

スクリプトのこの部分は失敗します。パスワードが更新されていません。私は次のことを試しました:

VAR="1234test6789"
echo -e "DEFAULT\n$VAR\n$VAR" | passwd user

基本的に、デフォルトの VM は、デフォルトのパスワード (DEFAULT) を持つユーザー (jack など) でセットアップされます。上記のスクリプトは、デフォルトのパスワードを使用して、VAR に保存されている新しいパスワードを更新します。ログインするとスクリプトは単独で機能しますが、起動時に同じことを行うことはできません。なんらかのシステム ポリシーか、これを防止する何かがあると確信しています。もしそうなら、私は何らかの回避策が必要です。この VM は一括展開され、自動的にパッケージ化され、CD ISO から渡されるカスタム ユーザー パスワードで構成されます。

助けてください。ありがとうございました!

* アップデート *

ああ、私はUbuntu 12.04を使用しています

* アップデート *

私はあなたの提案を試みました。次のファイルは直接 rc.local にあります。つまり、パスワードは更新されません。ただし、スクリプトは実行されています。タッチラインを追加してテストしました。

touch /home/jack/test
VAR="1234test5678"
printf "P@ssw0rd\n$VAR\n$VAR" | passwd jack

P@ssw0rd は、デフォルトの VM パスワードの例です。
ジャックはユーザー名の例です。

* アップデート *

この問題は rc.local に関連している可能性があります。そのため、rc.local は実行レベルのかなり早い段階で呼び出され、問題を引き起こしている可能性があります。

* アップデート *

まあ、潜在的に良いニュースです。パスワードは現在更新されているようですが、$VAR で設定したものとは別のものに更新されています。それに何かを加えているのではないかと思います。もちろんこれは単なる推測です。テストを実行するたびに、起動時にスクリプトが実行された直後に、更新しようとしていたユーザー名でログインできなくなります。これだけの情報しかないことは承知していますが、現時点で入手できる情報はこれだけです。パスワードに何か他のものを追加する理由、またはその理由は何ですか?

* 解決 *

そのため、以下の提案が機能しない理由について、いくつかの小さな問題がありました。それらは無関係なので、ここでは概説しません。最終的な解決策は、Graeme が私のスクリプトの他の機能と結び付けられたことでした。これについては、以下で共有します。

デフォルトの VM ブート
rc.local は、次のことを行います。

if [ -f /etc/program/tmp ]; then
  mount -t iso9660 -o ro /dev/cdrom /media/cdrom
  cd /media/cdrom
  ./boot.sh
fi

(tmp ファイルは、最初のブート スクリプトが複数回実行されるのを防ぐためだけに存在します。boot.sh が 1 つを実行すると、その tmp ファイルが削除されます。)

CDROM 上の boot.sh が (root 権限で) 実行されます。 boot.sh は、CDROM から /etc/program にファイルをコピーします。 boot.sh は、次のようにユーザーのパスワードも更新します。

VAR="DEFAULT"
cp config "/etc/program/config"
printf "$VAR\n$VAR\n" | passwd user
rm -rf /etc/program/tmp

(VAR は、当社の OVA 展開ソリューションに接続されているサーバーの別の部分によって変更されます。基本的に、ユーザーは VM 用にカスタマイズされた十分にランダムなパスワードを取得するため、同様のユーザーは他の VM にアクセスできません)

まだいくつかのテストを行う必要がありますが、この問題が解決されたことにかなり満足しています。95%

4

1 に答える 1

0

Edit - updated for not entering the original password

The sh version of echo does not have the -e option, unlike bash. Switch echo for printf. Also the rc.local script will have root privileges, so it won't prompt for the original password. Using that will cause the command to fail since 'DEFAULT' will be taken as the new password and the confirm will fail. This should work:

VAR="1234test6789"
printf "$VAR\n$VAR\n" | passwd user

Ubuntu uses dash at boot time, which is a drop in replacement for sh and is much more lightweight that bash. echo -e is a common bashism which doesn't work elsewhere.

于 2014-01-13T16:36:04.987 に答える