唯一の解決策は Ubuntu 12.04 で動作します:
echo -e "new_password\nnew_password" | (passwd user)
しかし、2 番目のオプションは、以下から変更した場合にのみ機能します:
echo "password:name" | chpasswd
宛先:
echo "user:password" | chpasswd
元の投稿の説明を参照してください:スクリプトによるパスワードの変更
以下の賢明な言葉を読んでください:
- http://mywiki.wooledge.org/BashFAQ/078
引用します:
<ブロック引用>bash でできることは、おそらく機能しません。 passwd(1) は標準入力から読み取りません。これは意図的なものです。それはあなたの保護のためです。パスワードは、プログラムに入れたり、プログラムによって生成されたりすることを意図したものではありません。それらは、機能する脳を備えた実際の人間の指によってのみ入力されることを意図しており、決してどこにも書き留められることはありませんでした。
それにもかかわらず、35 年にわたる Unix のセキュリティを回避する方法について多くのユーザーから問い合わせが寄せられています。
shadow(5)
を設定する方法を説明します パスワードを適切に設定し、GNU-I-only-care-about-security-if-it-doesn't-make-me-think-to-much を表示します - passwd(1)
を悪用する方法 .
最後に、ばかげた GNU passwd(1) 拡張機能 --stdin
を使用する場合は、 、しない コマンドラインに入力してパスワードを渡します。
echo $mypassword | passwd --stdin # Eternal Sin.
echo "$mypassword" | passwd --stdin # Eternal Sin, but at least you remembered to quote your PE.
passwd --stdin <<< "$mypassword" # A little less insecure, still pretty insecure, though.
passwd --stdin < "passwordfile" # With a password file that was created with a secure `umask(1)`, a little bit secure.
最後は GNU passwd
でできる最善のことです .それでもお勧めしませんが。
コマンドラインにパスワードを入力するということは、ボックスへのアクセスのほんのわずかなヒントさえあれば、誰もが監視できることを意味します ps
などでパスワードを盗みます。あなたの箱は安全だと思っていても。それはあなたが本当にすべきことです どんな犠牲を払っても避ける習慣を身につけてください (そうです、仕事を成し遂げるのにもう少し面倒なことをする犠牲さえも)。
「man 1 passwd
から ":
--stdin
This option is used to indicate that passwd should read the new
password from standard input, which can be a pipe.
だからあなたの場合
adduser "$1"
echo "$2" | passwd "$1" --stdin
[更新 ] コメントでいくつかの問題が提起されました:
あなたの passwd
コマンドに --stdin
がない可能性があります オプション:chpasswd
を使用します ashawley が提案するように、代わりにユーティリティを使用してください。
bash 以外のシェルを使用している場合、"echo" は組み込みコマンドではない可能性があり、シェルは /bin/echo
を呼び出します。 .パスワードはプロセス テーブルに表示され、ps
などのツールで確認できるため、これは安全ではありません。 .
この場合、別のスクリプト言語を使用する必要があります。以下は Perl での例です:
#!/usr/bin/perl -w
open my $pipe, '|chpasswd' or die "can't open pipe: $!";
print {$pipe} "$username:$password";
close $pipe
現在、このコマンドを使用できます:
echo "user:pass" | chpasswd