2013-04-28 70 views
2

我搜索了这一个有些淡淡的,但我无言以对如何创建用户添加到Linux机器用perl脚本

我试图将用户添加到Linux机器用Perl 代码:

my $md5password = `openssl passwd -1 $password1`; 
system("useradd -s /bin/bash -d /home/$username -p $md5password"); 

但这导致: sh: 2: -p: not found

当我执行通过终端这一命令没有任何问题...... arrr! 有人吗?

更新:

10倍到@BraveNewCurrency建议其工作的:)

代码:

if(($password1 eq $password2) && length($password1) > 0) 
{ 
    $valid = 1; 
    my $md5password = `openssl passwd -1 $password1`; 
    chomp($md5password); 
    system("useradd -s /bin/bash -d /home/$username -p \'$md5password\' $username"); 

我会更成后来消毒$username

我不能upvote @BraveNewCurrency因为我的代表是15岁以下...我会很高兴,如果你们中的一些人会upvote他。

+7

看起来你需要清理'$ username' - 你有一个换行符和/或一个分号(猜测)。 – Mat 2013-04-28 11:48:05

+1

'chomp'应有尽有! – gaussblurinc 2013-04-28 15:39:36

回答

1

你应该检查你的shell元字符的用户名/密码并转义它们。 (否则,这是一个等待发生的安全问题。)

您还应该考虑Chef/Puppet/Salt/Ansible/..或类似的东西,这可以让您在更高层次上自动构建服务器。他们都是陈述性的(和幂等),所以不要担心琐碎的细节。)

0

据我所知,system命令使用的是参数列表,而不是字符串。
您也应该明确指出您尝试执行的命令的路径。

你试过:

@args = ( 
      '/usr/sbin/useradd', 
      '-s', '/bin/bash', 
      '-d', "/home/$username", 
      '-p', $md5password 
     ); 
system(@args) == 0 
    or die "Failed adding user: @args failed: $?" 

正如其他人所说,你应该确保你消毒$username创建用户或者你可以在大麻烦才把。

相关问题