ubuntu - 用puppet建立使用者, 無法指定密碼
PHP中文网
PHP中文网 2017-04-21 10:55:18
0
1
436

已經試過在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中文网

认证0级讲师

全部回覆(1)
刘奇

你說的「密碼還是沒有」是指你輸入密碼"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']
  }
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板