我需要生成一个用户名和密码对,以便在Unix系统上创建用户,最好是一对难以猜测的(为安全起见)。有没有人知道使用Perl做这个的好方法?
更新
所以我把下面的一些答案结合起来并做了一些我自己的东西,这就是我最终得到的东西。现在这些生成的用户名和密码有点神秘,不容易记住,这正是我所寻找的。但是,如果您正在寻找更易读的代码,那么您必须根据自己的喜好进行调整。
use String::Random qw(random_regex);
use Data::Random::WordList;
my $user = random_regex('\w{3,6}\d{3,6}\w{3,7}') . time . int(rand(1000));
my $wl = new Data::Random::WordList( wordlist => '/usr/share/dict/words' );
my @rand_words = $wl->get_words(int(rand(3)) + 3);
$wl->close();
my $pass = join " ", @rand_words;
$pass .= ' ' . int(rand(1000)) . time;
my $crypt_pass = crypt($pass,'salt');
system "useradd -p $crypt_pass $user";
#you can now login with $user and $pass on your system
答案 0 :(得分:2)
用于生成密码您可以使用:
$password = `date | md5sum | fold -w 10 | head -n 1`;
$password = crypt($password,'some_string');
实际上Bash比Perl更多,但是它可以胜任。
答案 1 :(得分:2)
来自http://sysadminsjourney.com/content/2009/09/16/random-password-generation-perl-one-liner/
perl -le 'print map { (a..z,A..Z,0..9)[rand 62] } 0..pop' 8
将从字符a-z,A-Z和0-9生成随机8个字符的字符串。
您应该可以修改此项以生成用户名和密码。
用户名将是:
perl -le 'print map { ([a-z_][a-z0-9_][rand 62] } 0..pop' 30
密码类似,但您需要使用passwd
命令将其实际设置为用户。不确定Perl是否具有等价物。
答案 2 :(得分:2)
正如其他人所说,它的BASH比perl更多。这是我生成密码的方法:
passwd=`date +%s | sha256sum | base64 | head -1 | cut -c 1-8`