2013-04-28 76 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創建用戶或者你可以在大麻煩才把。

相關問題