2014-01-13 67 views
1

*快速的解決方案* 對於那些訪問基於標題只,但又不希望通過下面的一切,或自以爲一切讀取該頁面下方並不適用於您的情況,也許這將有助於...如果你所要做的就是在啓動時更改用戶密碼並使用Ubuntu 12.04或類似軟件,這裏就是你所要做的。添加腳本在啓動時自動包含以下內容:擊更改密碼

printf "New Password\nRepeat Password\n" | passwd user 

請記住,這必須以root身份運行,否則你將需要提供原始密碼,像這樣:

printf "Original Password\nNew Password\nRepeat Password\n" | passwd user 

*開始原來的問題*

我有一個第一啓動腳本,通過從掛載的ISO做一些配置和文件副本來設置虛擬機。基本上會發生以下情況:

  1. VM第一次啓動。
  2. /etc/rc.local用於將CD ISO安裝到/ media/cdrom並執行/media/cdrom/boot.sh
  3. boot.sh文件執行一些基本配置,將一些文件從CD複製到VM並且應該使用當前密碼更新用戶密碼。

該部分腳本失敗。密碼未更新。我已經嘗試了以下情況:

VAR="1234test6789" 
echo -e "DEFAULT\n$VAR\n$VAR" | passwd user 

基本上默認VM是與用戶(例如千斤頂)設置一個默認的密碼(默認值)上面的腳本,使用默認的密碼更新存儲在VAR新密碼。該腳本在登錄時自行工作,但我無法在啓動時執行相同的操作。我確信有某種系統策略或阻止這一點的東西。如果是這樣,我需要一些解決方法。該VM正在大規模部署,並且會自動打包並使用從CD ISO傳遞的自定義用戶密碼進行配置。

請幫忙。謝謝!

* UPDATE *

哦,我使用Ubuntu 12.04

* UPDATE *

我想你的建議。直接在rc.local中的以下文件即密碼不會更新。腳本正在運行。我通過添加觸摸線進行測試。

touch /home/jack/test 
VAR="1234test5678" 
printf "[email protected]\n$VAR\n$VAR" | passwd jack 

P @ ssw0rd是示例默認VM密碼。
Jack是示例用戶名。

* UPDATE *

好了,我們認爲這個問題可以綁定到rc.local中。因此,在運行級別之前,rc.local會很早被調用,並可能導致問題出現。

* UPDATE *

好,可能是好消息。密碼似乎現在正在更新,但它更新的內容不是我在$ VAR中設置的內容。我認爲它可能會增加一些內容。這當然只是一個猜測。每次運行測試時,腳本在啓動後立即運行,我不能再用它試圖更新的用戶名登錄。我知道這並不是很多信息,但這是我目前所掌握的一切。任何想法是什麼或爲什麼將其他東西附加到密碼?

*解*

所以有幾個小問題,爲什麼我不能讓下面的工作的建議。我不會在這裏概述它們,因爲它們無關緊要。最終的解決方案來自Graeme,與我的腳本的一些其他功能捆綁在一起,我將在下面分享。

默認虛擬機啓動
rc.local中執行以下操作:

if [ -f /etc/program/tmp ]; then 
    mount -t iso9660 -o ro /dev/cdrom /media/cdrom 
    cd /media/cdrom 
    ./boot.sh 
fi 

(tmp的文件是存在的只是爲了防止第一啓動腳本運行不止一次boot.sh運行後一個,它刪除了tmp文件。)

boot.sh CDROM上運行(以root權限) boot.sh複製文件從CD-ROM到/ etc /程序 boot.sh還更新與用戶密碼以下:

VAR="DEFAULT" 
cp config "/etc/program/config" 
printf "$VAR\n$VAR\n" | passwd user 
rm -rf /etc/program/tmp 

(VAR由連接到我們的OVA部署解決方案的服務器的另一部分更改。基本上,用戶爲他們的虛擬機獲得了一個定製的,隨機的密碼,所以類似的用戶不能訪問彼此的虛擬機)

還有一些測試需要完成,但我相當滿意這個問題已經解決。 95%

+0

嘗試在'jack'後面添加'&>/home/jack/test',看看passwd的輸出是什麼。 – Graeme

+0

等待,如果您有root權限,則不輸入原始密碼,只需輸入兩次新密碼。 – Graeme

+0

在引導AFAIK結束時會調用'rc.local',它可能是一個問題,您必須在引導之後等待所有操作完成才能運行。 – Graeme

回答

0

編輯 - 更新不輸入原始密碼

sh版本回聲不具備-e選項,不像bash。開關echoprintfrc.local腳本也具有root權限,因此它不會提示輸入原始密碼。使用它會導致命令失敗,因爲'DEFAULT'將被視爲新密碼,並且確認將失敗。這應該工作:

VAR="1234test6789" 
printf "$VAR\n$VAR\n" | passwd user 

的Ubuntu在開機的時候,這是在更換下降爲sh和更加輕便的是bash使用dashecho -e是一種在其他地方不起作用的常見的鞭策。

+0

現在測試。我的手指交叉。 – Atomiklan

+0

查看我的更新 – Atomiklan

+0

所以我在#!/ bin/dash中測試過,你的建議確實有效。 printf在短劃線中工作,echo -e不。但是它仍然無法啓動。 – Atomiklan