*快速的解决方案* 对于那些访问基于标题只,但又不希望通过下面的一切,或自以为一切读取该页面下方并不适用于您的情况,也许这将有助于...如果你所要做的就是在启动时更改用户密码并使用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