2014-01-13 71 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