*快速的解決方案* 對於那些訪問基於標題只,但又不希望通過下面的一切,或自以爲一切讀取該頁面下方並不適用於您的情況,也許這將有助於...如果你所要做的就是在啓動時更改用戶密碼並使用Ubuntu 12.04或類似軟件,這裏就是你所要做的。添加腳本在啓動時自動包含以下內容:擊更改密碼
printf "New Password\nRepeat Password\n" | passwd user
請記住,這必須以root身份運行,否則你將需要提供原始密碼,像這樣:
printf "Original Password\nNew Password\nRepeat Password\n" | passwd user
*開始原來的問題*
我有一個第一啓動腳本,通過從掛載的ISO做一些配置和文件副本來設置虛擬機。基本上會發生以下情況:
- VM第一次啓動。
- /etc/rc.local用於將CD ISO安裝到/ media/cdrom並執行/media/cdrom/boot.sh
- 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%
嘗試在'jack'後面添加'&>/home/jack/test',看看passwd的輸出是什麼。 – Graeme
等待,如果您有root權限,則不輸入原始密碼,只需輸入兩次新密碼。 – Graeme
在引導AFAIK結束時會調用'rc.local',它可能是一個問題,您必須在引導之後等待所有操作完成才能運行。 – Graeme