在Perl中生成有效的Unix用户名和密码

时间:2013-05-22 03:57:07

标签: perl unix passwords username

我需要生成一个用户名和密码对,以便在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

3 个答案:

答案 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`