搜尋

首頁  >  問答  >  主體

ubuntu - 用puppet建立使用者, 無法指定密碼

已經試過在ubuntu上安裝 puppet libshadow-ruby1.8

class users {
  package { "libshadow-ruby1.8":
    ensure => latest,
    require => Exec['apt-get update']
  }
  user { "ubuntu":
    ensure  => present,
    uid     => '1001',
    gid     => 'admin',
    shell   => '/bin/bash',
    password => sha1('ubuntu'),
    managehome => true,
    require => Package['libshadow-ruby1.8']
  }
}

include users

這麼寫用戶名是創建了, 但是密碼還是沒有

ps: 其實我是在用vagrant, vagrant是默認用戶名想換成ubuntu

PHP中文网PHP中文网2893 天前468

全部回覆(1)我來回復

  • 怪我咯

    怪我咯2017-04-21 10:57:18

    你說的「密碼還是沒有」是指你輸入密碼"ubuntu"時驗證不通過嗎?還是說shadow文件裡根本沒有ubuntu這筆紀錄?

    我猜是第一種(驗證不通過),shadow檔案中的密碼好像不是sha1()產生的,我不知道你從哪裡看到的這個方法。

    我想到的解決方案有:

    在puppet class中使用shadow檔案複製出來的密碼

    先在終端下用useradd, passswd建立用戶,並設定密碼為ubuntu,如圖:

    再去shadow檔案中把加密後的密碼複製出來,用這樣的puppet程式碼建立使用者:

      user { "ubuntu":
        ensure  => present,
        uid     => '1001',
        gid     => 'admin',
        shell   => '/bin/bash',
        password => '$mEUouB2K$zCgsWNuI0KhUvHbTcv6bV1UV2gx/VFB390zVOZ37lukr2PI7b4RKNkvpHaMRoG4zCqLvP0dN4p6uIi0xEZeRJ0',
        managehome => true,
        require => Package['libshadow-ruby1.8']
      }
    寫個bash腳本,使用expect和passwd命令為新建的用戶設定密碼

    由於passwd命令直接從stdin接收密碼,不能透過passwd ubuntu ubuntu這樣的命令列參數來設定密碼,所以,變通的辦法是自己寫個bash shell(假設叫set_passwd.sh),這個shell腳本從命令列接收明文密碼,再用expect傳送給passwd指令
    這樣,你的puppet腳本如下:

      user { "ubuntu":
        ensure  => present,
        uid     => '1001',
        gid     => 'admin',
        shell   => '/bin/bash',
        managehome => true,
        require => Package['libshadow-ruby1.8'],
        notify  => Exec['change_pass']
      }
      
      exec {'change_pass':
          command => '/bin/sh /root/set_passwd.sh ubuntu[用户名] ubuntu[密码]',
          require => File['/root/set_passwd.sh']
      }

    回覆
    0
  • 取消回覆