news 2026/10/10 3:39:12

虚拟机用户密码修改全攻略:从Linux到Windows的分层详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
虚拟机用户密码修改全攻略:从Linux到Windows的分层详解

说实话,我一开始看到这个标题“修改虚虚拟机用户密码”,第一反应是先笑了一下——又是笔误,“虚虚拟机”大概是想写“虚拟机”吧。不过这个选题本身倒是非常实在。我刚入行那会儿带我的前辈说过一句话:虚拟机这玩意儿,十个坑里有八个跟密码、权限、启动顺序有关,你要是能把一台虚拟机的密码体系彻底搞明白,后面学网络、学存储、学高可用都会顺手很多。

这篇算是“如何使用虚拟机”系列的第一篇,我不打算只给你扔几条命令完事。因为“修改虚拟机用户密码”这件事,实际上包含了至少三个完全不同的场景:登录系统后主动改密、忘记了密码想重置、以及修改虚拟机配置文件或加密层级的密码。三种场景用的工具和原理完全不一样,如果混在一起处理,很容易越搞越乱。所以这篇我会把边界先划清楚,再分场景讲操作步骤,顺带把踩过的坑也都交代一遍。

适用读者:刚开始接触虚拟机的小白,或者已经在用VMware、VirtualBox、ESXi但没怎么系统整理过密码管理思路的同学。无论你虚拟机里跑的是Linux还是Windows,这篇都能对得上。

1. 修改密码前先分清:你动的是哪一层密码

1.1 系统账户密码与虚拟机加密密码不是一回事

很多人刚接触虚拟机时,会把“虚拟机密码”当成一个统一的东西,其实这里面至少要拆成两个完全独立的层面:

第一层是虚拟机内部操作系统的用户密码。这是最常说的“用户密码”,比如你Ubuntu里的登录密码、Windows里的本地账户密码。修改它要进入系统内部,用操作系统自带的命令或图形界面操作。

第二层是虚拟机本身的安全加密密码。比如VMware Workstation在创建虚拟机时可以为虚拟机文件启用加密,或者为vSphere中的虚拟机设置加密。这个密码锁的是虚拟机配置文件(.vmx)和虚拟磁盘文件(.vmdk),防止别人把你的虚拟机文件拷走之后在别的环境里打开。它跟操作系统登录密码完全无关。

我见过一个真实案例:有人给VMware里的Windows虚拟机设置了启动密码,后来忘记了,就去VMware的虚拟机设置里找“重置密码”按钮,找了半天也没有,最后把虚拟机整个删了重装。实际上他应该做的是重置Windows系统的登录密码,而不是去动VMware这层的加密设置。反过来也一样——如果你改了VMware的虚拟机加密密码,系统登录密码并不会跟着变,因为两者连存储的位置都不一样。

1.2 还有一层容易被忽略的“固件级密码”

除了上面两层,现代虚拟机还支持在BIOS/UEFI层面设置密码。如果你给虚拟机的固件设置了开启密码,每次虚拟机开机时都会先停在“输入密码”的界面,然后才进入操作系统的引导。这种情况在物理机上叫BIOS密码,在虚拟机里同样存在。

VMware Workstation里可以通过“虚拟机设置 — 选项 — 高级”来配置固件类型和引导选项,而虚拟机BIOS密码一般是在开机时按F2进入Setup之后设置的。密码存放在虚拟机的NVRAM文件里,跟操作系统毫无关系。

所以,动任何密码之前,你先问自己一个问题:这个密码是操作系统登录时提示输的,还是开机阶段就提示输的,还是虚拟机配置文件加载阶段提示输的?答对了,操作方向基本不会错。

1.3 分清层级之后,操作才不会伤筋动骨

我自己的习惯是:改密码之前先做一个轻量级的“定位检查”。如果虚拟机还没开机,那就先确认是不是VMware/ESXi层面的加密;如果虚拟机可以正常登录,那就是操作系统密码;如果卡在BIOS界面,那就是固件密码。记住这个判断顺序,基本可以避免99%的误操作。

还有一个很实用的辨别技巧:你启动虚拟机时如果输入框里显示的是英文提示、并且整个界面很简陋(不是Windows也不是Linux的图形登录界面),那大概率是固件或BIOS密码。如果是图形界面的登录页,则是操作系统密码。这一步判断准了,后面的事都好办。

2. Linux虚拟机里改密:从passwd命令到密码策略

2.1 passwd命令的前置条件与使用逻辑

Linux虚拟机里的用户密码修改,核心命令就一个:passwd。但不建议上来就乱敲,建议先弄清楚“我是谁、我要改谁”。

打开终端,先看当前登录用户:

whoami id

如果你是普通用户,想改自己的密码,直接运行:

passwd

系统会先要求输入当前的密码,然后要求输入新密码两次,全程交互式,不会在命令行里明文显示。如果当前用户是管理员(sudo组),想改另一个用户的密码,就用:

sudo passwd 目标用户名

这里注意一点:sudo passwd改别人密码时,不需要知道那个人的旧密码,只要你有sudo权限就够了。系统会直接提示“输入新的密码”,确认后更新到/etc/shadow文件里。

我实际测试过的一个细节:Ubuntu默认创建的普通用户在安装系统时已经加入sudo组,所以可以直接用sudo passwd 用户名来修改其他人的密码,但如果你用的是最小化安装的CentOS或者Debian,普通用户不一定有sudo权限,这时候需要先用root登录,或者用su -切换到root再执行passwd。

2.2 密码策略与chage命令:改完之后别忘了检查过期时间

改完密码只是第一步。Linux系统里密码还有一个“有效期”的概念,体现在/etc/shadow文件里。如果系统的密码策略要求90天必须换一次,而你只改了密码没看有效期,可能过段时间突然就登不进去了。

查看某个用户的密码有效期:

chage -l 目标用户名

这个命令会输出:最近一次修改时间、密码过期时间、失效前警告天数、账户失效时间等。如果发现密码策略过紧导致生命周期太短,可以手动调整:

# 设置密码永不过期 chage -M 99999 目标用户名 # 设置密码90天后过期,过期前7天提醒 chage -M 90 -W 7 目标用户名

我建议虚拟机里的测试环境把密码策略放宽一点,毕竟频繁改密码对实验环境来说纯属折腾。但生产环境虚拟机,如果你有权限管理,强烈建议保留策略,并用集中认证(LDAP/AD)统一管理,不要每台机器单独改。

2.3 修改Ubuntu默认root密码的特殊情况

另一个常见需求是改root密码。Ubuntu出于安全考虑,默认禁用了root账户的直接登录,这导致很多新手以为“没有root密码”。其实root账户一直在,只是没有可用的登录密码。

如果你确实需要给root设置一个密码,可以:

sudo passwd root

执行后你就会拥有设置root密码的机会。设置完成之后,root可以直接在终端里登录,也可以通过SSH登录(前提是SSH配置里允许root登录)。

但这里有个坑:Ubuntu的SSH默认配置/etc/ssh/sshd_config里PermitRootLogin默认为prohibit-password或no。如果你改了root密码却依然无法通过SSH远程登录,不用怀疑密码错了,而是SSH服务不允许root用密码登录。想开放需要修改配置文件并重启SSH服务。这个坑我自己踩过,当时还反复重设了好几次密码,最后发现根本不是密码的问题。

2.4 实测中容易忽略的权限问题

再补一个实测经验:当你执行sudo passwd 任意用户名时,如果该用户名不存在,系统会报错“用户不存在”。这听起来很基础,但很多新手会把用户名抄错,比如把ubunut当成ubuntu,导致反复提示密码修改失败。建议养成先id 用户名验证一下用户存在性的习惯,再执行密码修改。

3. Windows虚拟机里的改密:图形界面、命令行与安全策略

3.1 最简单的改密操作:Ctrl+Alt+Del窗口

Windows虚拟机修改密码最直观的方法,是登录之后按Ctrl+Alt+Del,然后选择“更改密码”。如果你是用VMware Workstation,这个组合键默认会发送给虚拟机,不需要额外设置。

这里有个易踩的坑:VMware Workstation的Ctrl+Alt+Del有可能被宿主机拦截,尤其是在Windows宿主机上,建议用菜单栏中的“虚拟机 — 发送 Ctrl+Alt+Del”来操作,或者直接按Ctrl+Ins。我在VirtualBox里则习惯用“输入 — 键盘 — 插入Ctrl+Alt+Del”,这样更稳定。

登录后改密码时,Windows会要求输入旧密码,然后设置新密码。如果系统加入了域(Active Directory),还会提示输入域账号信息,操作逻辑稍有不同。不过多数学习环境是独立账户,不用管域。

3.2 图形界面之外:lusrmgr.msc和net user命令

有时候你已登录Windows,但想改的是另一个本地账户的密码,此时图形界面需要先注销或使用“其他用户”才能操作。更快的办法是使用本地用户和组管理器。

按Win+R,输入:

lusrmgr.msc

在“本地用户和组”面板里右键用户,选择“设置密码”,不需要输入旧密码,前提是你当前账户有管理员权限。这个工具改密码非常方便,尤其适合虚拟机里那种“忘记A账户密码但管理员账户还能登”的场景。

如果命令行更顺手,可以用:

net user 用户名 新密码

管理员权限的命令提示符里直接执行,立刻生效,没有任何交互确认。更严谨一点,还可以加/expires:never参数防止账户过期:

net user 用户名 新密码 /expires:never

3.3 PowerShell方式与复杂密码策略的限制

在某些较新的Windows Server版本里,net user仍可用,但PowerShell的Set-LocalUser更符合脚本化管理习惯。举个例子:

# 在管理员PowerShell中执行,交互式输入新密码 $password = Read-Host "请输入新密码" -AsSecureString Set-LocalUser -Name "UserName" -Password $password

如果只是想改本机当前用户的密码,还可以用Set-LocalUser -Name $env:USERNAME配合上面的密码变量。

这套命令在批量维护多个Windows虚拟机时很有用——你可以在宿主机上用PowerShell远程执行,或者通过计划任务统一修改,比一台台点“Ctrl+Alt+Del”快得多。

但有一个问题:如果这台Windows虚拟机设置了“密码必须符合复杂性要求”(默认策略其实是“已启用”),你设置的“123456”这类弱密码会被直接拒绝。碰到这种情况,要么设置一个满足复杂性要求的密码(大小写字母+数字+符号),要么临时修改本地安全策略。

修改密码复杂性策略的位置在:

Win+R → secpol.msc → 账户策略 → 密码策略 → 密码必须符合复杂性要求

将“已启用”改为“已禁用”,再执行修改密码即可。不过我建议学习环境可以放宽,真实环境不要轻易关复杂性策略——虚拟机一旦暴露在外部网络上,弱密码被扫到只是时间问题。

3.4 别忘了增强功能/VMware Tools的联动问题

Windows虚拟机里经常遇到的一个现象:键盘输入卡顿、鼠标变成一个小圆点、剪贴板不通,这时候你想用“Ctrl+Alt+Del”改密码会特别痛苦。这类问题的根子往往是虚拟机没装好“增强功能”——VMware里叫VMware Tools,VirtualBox里叫增强功能。

我遇到过不止一次:新装的Windows虚拟机半屏显示,鼠标一进去就出不来,点“更改密码”按钮半天点不中。后来装了VMware Tools之后,一切恢复正常。所以如果你在虚拟机里改密码时感觉操作界面不对劲,建议先搞定增强功能,再谈密码修改,不然光输入法切换和鼠标捕捉就够你烦的。

4. 密码遗忘后的重置链路:Linux单用户模式与Windows安装介质

4.1 Linux虚拟机忘记密码:利用GRUB引导进入单用户模式

这是整个话题里最有技术含量、也最容易出问题的一块。别慌,下面是完整过程。

首先,重启虚拟机,在GRUB引导菜单出现时,迅速按下方向键,选中默认内核那一行(通常写着Ubuntu或CentOS),然后按e进入编辑模式。

找到以linux开头的一行(后面可能是一长串内核参数),在行尾加上:

single

或者,如果你用的发行版支持systemd,更通用的做法是加上:

init=/bin/bash

然后按Ctrl+X或F10启动。系统会直接进入一个root shell(单用户模式),不需要密码。

但这里有个区别:如果用的内核带SELinux(如CentOS/RHEL),直接改密码后可能导致SELinux上下文错乱。所以保险做法是挂载根文件系统为可写状态,然后修改密码之前,先重新挂载:

mount -o remount,rw /

然后执行passwd 用户名。如果你走的是init=/bin/bash路径,还要注意根文件系统可能是只读挂载,务必先执行上面的remount,否则会报“passwd: Authentication token manipulation error”,这种报错看着像权限问题,其实是文件系统只读。

改完之后,如果系统启用了SELinux,推荐创建一个autorelabel标记文件,让下次启动时自动修复安全上下文:

touch /.autorelabel

然后重启即可。

4.2 单用户模式进不去?检查GRUB密码与root锁定

实际实验时,有些虚拟机配置了GRUB密码,或者固件密码,这时候你按e编辑引导参数会被拦截,提示输入用户名和密码。这种情况下没有捷径,只能找回GRUB密码或检查是不是在虚拟机配置里设置了密码。

还有一个更常见的坑:很多Linux发行版默认root账户没有密码,单用户模式虽然直接给你root shell,但部分系统会要求你输入root密码才能继续维护。如果遇到这种情况,你的思路得回到第四章的Windows逻辑——用安装光盘或Live CD启动,挂载根分区后手工修改/etc/shadow文件,或者直接chroot进去重置密码。

具体到VMware/ESXi环境,你还可以利用宿主机的管理能力,把虚拟机开机选项设置为“引导至ISO镜像”,用原版安装镜像进入救援模式,操作思路与物理机一致,只是挂载磁盘的盘符需要按实际情况调整。

4.3 Windows虚拟机忘记密码:安装介质+Utilman替换法

Windows虚拟机忘记密码后,重置思路跟Linux完全不同,但有一个非常经典、且在自己虚拟机里完全合法的办法:利用安装介质进入命令提示符,替换“轻松访问”按钮的后台程序。

流程如下:

  1. 将Windows安装ISO挂载到虚拟机的光驱。
  2. 启动虚拟机并选择从光驱引导。
  3. 在安装界面按Shift+F10打开命令提示符。
  4. 找到系统盘符(通常是C盘,但在Windows PE里可能是D盘,需要dir确认)。
  5. 备份并替换utilman.exe:
cd /d C:\Windows\System32 ren utilman.exe utilman.exe.bak copy cmd.exe utilman.exe
  1. 关闭命令提示符,重启虚拟机,正常进入登录界面。
  2. 点击右下角的“轻松访问”按钮,此时弹出的其实是命令提示符。
  3. 执行:
net user 用户名 新密码
  1. 关闭窗口,用新密码登录。

有一点必须说明:这个操作只适用于你自己拥有、且没有启用BitLocker等全盘加密的虚拟机。如果开启了BitLocker,修改启动文件会被锁定,步骤会复杂很多,我不建议在无充分准备时操作。同时,这一招只应在你有权管理的环境中使用,千万别用在别人机器上——边界要拎清楚。

4.4 重置密码之后必须处理的收尾事项

重置完密码,别急着欢庆,还有几件收尾事情一定得做:

第一,恢复被替换的系统文件。Windows那边,登录系统后立刻把utilman.exe改回来:

cd C:\Windows\System32 del utilman.exe ren utilman.exe.bak utilman.exe

第二,检查账户是否被锁定或禁用。连续多次输入错误密码,Windows会触发账户锁定策略,Linux也会因为pam_faillock锁定用户。重置密码不一定能解锁,务必确认:

# Linux查看账户锁定状态 faillock --user 用户名 # 解锁用户 faillock --user 用户名 --reset

第三,检查SSH密钥是否仍然有效。重置的是密码文件,但SSH的authorized_keys不会受影响,密钥登录依然有效;不过如果你之前用的是密码登录,某些云镜像默认禁用了root密码登录,重置密码后依然无法SSH,需要检查sshd_config。

这些收尾件事看似琐碎,但漏掉任何一个,都可能让你刚刚恢复的虚拟机在下一次重启后又变得“进不去”。

5. 改密后的连锁反应:SSH密钥、计划任务、加密磁盘与快照策略

5.1 改了密码,SSH密钥登录到底会不会失效

这是个高频问题。很多人改完Linux虚拟机密码后,发现原本配置好的SSH密钥登录依然能用,感到很奇怪;也有人改完密码后密钥却失效了,非常迷惑。

结论是:修改用户密码不会影响SSH密钥登录。因为密钥登录验证的是公钥/私钥配对,跟/etc/shadow里的密码哈希无关。那为什么有人改完密码后密钥失效?

真正的原因往往是他改密码时,系统重新创建了用户主目录,或者误操作覆盖了.ssh目录;更常见的情况是,他重置密码时走的是Live CD或chroot,导致/root/.ssh的权限变了——SSH对权限非常敏感,如果.ssh目录权限变成777,sshd会直接忽略这个目录里的密钥。

如果遇到这类情况,修复权限即可:

chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys

Windows虚拟机也类似:如果用的是OpenSSH密钥登录,密码重置不会影响密钥;但本地net user修改密码后,某些以当前账户身份运行的Windows服务或计划任务可能会报“登录失败”,因为它们的凭证缓存里仍是旧密码。

5.2 不要忘记“服务账户”和计划任务

这是个非常容易翻车的地方。虚拟机里如果跑着网站、数据库、备份脚本,它们可能不是以你的交互式登录身份运行的,而是以某个专用服务账户运行,并且服务配置里保存了密码。

比如Windows虚拟机上装了一个MySQL服务,安装时指定了“登录身份”为.\mysql_svc,并输入了密码。当你使用net user mysql_svc 新密码改了密码后,服务管理器里保存的还是旧密码,导致服务启动失败。

排查方向是:在“服务”面板中找到对应服务,右键“属性 — 登录”,重新输入新密码。Linux同样存在这类问题,比如systemd unit文件里用User=指定了运行用户,如果该用户的密码被重置,倒一般不影响进程启动(因为进程启动不需要密码),但如果是通过pam认证的动态凭据,就要额外留意。

我个人的经验:改任何虚拟机用户密码之前,先花两分钟梳理一下这台机器上跑着哪些服务、有没有计划任务、有没有共享文件夹访问凭证。这一步花的时间很少,但能省下改完密码之后到处排查“为什么服务全挂了”的半天时间。

5.3 加密磁盘与快照:改密前的最后一道保险

如果你给Linux的某块虚拟磁盘启用了LUKS全盘加密,或者Windows启用了BitLocker,密码重置链路会受到严重阻碍。尤其是BitLocker,重置Windows用户密码后,如果系统无法通过TPM或恢复密钥解锁数据盘,虚拟机启动后会出现“恢复界面”。所以,凡是加密过的虚拟机,改密码之前务必先确认你手里有恢复密钥。没有恢复密钥就乱改密码,等于把数据锁死。

相比之下,更稳妥的做法是利用虚拟机自带快照功能。VMware和VirtualBox都支持在修改密码前拍一个快照。

操作优先级我建议这样:

  1. 关闭虚拟机(或者至少确保一致性快照条件满足)。
  2. 在VMware Workstation里点击“虚拟机 — 快照 — 拍摄快照”。
  3. 给快照命名,比如“改密前_202506xx”。
  4. 再启动系统,执行密码修改。
  5. 如果修改过程中系统崩溃或密码改乱了,直接恢复到快照,回到改密前状态,重新再来。

快照不是万能钥匙,但它结合了“升级/变更前后可回滚”的思路。我见过太多人为了省事跳过快照,结果把系统改挂了,最后只能重装虚拟机里的操作系统,损失的时间远超拍快照那几秒钟。

5.4 模板与克隆机器的“密码同步陷阱”

如果你使用虚拟机模板或克隆功能批量复制虚拟机(这正是热搜词里“虚拟机管理”最常见的使用场景),还有一个隐藏很深的坑:模板里改的密码不会自动同步到已克隆出来的机器上。

举个例子:你维护了一个Windows模板,原来模板内置的管理员密码是OldPass123。你后来用这个模板克隆了10台虚拟机,克隆过程中没改密码,正常情况下这10台的密码其实仍是模板当时生成时的那一个。如果你现在把模板里的密码改成NewPass456,已经克隆出去的10台机器密码并不会跟着变。

正确做法是:遇到需要统一变更密码时,要么在模板里改完再重新克隆,要么通过批处理/集中管理工具(PowerShell DSC、Ansible等)批量推送新密码。自己手动一台台改也行,但机器多了之后肯定会漏。

这个坑尤其容易出现在员工培训、测试集群、课程实验环境里。听起来不像个技术问题,但运维事故里相当一部分都是这种“低科技含量”失误造成的。

结尾:一点个人体会

写了这么多,最后聊几句题外话。虚拟机密码管理这件事,表面上是几条命令、几个按钮,但真正让人崩溃的从来不是命令本身,而是“改之前没想清楚改的是哪一层密码”“改完之后没意识到服务凭证也要跟着动”。我自己踩过的坑,基本都是这两种。

所以我的习惯是:每台虚拟机建表登记,表格里有IP、操作系统、用途、密码修改日期、是否加密磁盘、有无快照;改密码前先把表看一眼,改完立刻更新日期。虽然很笨,但救了我好多次。这系列后续如果还有机会,我会接着聊聊虚拟机的网络配置、克隆与模板、以及如何安全的给虚拟机做快照与备份。先把密码这块吃透了,后面那些才有基础可谈。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/10 3:39:04

Word超链接批量删除方法:快捷键、VBA宏与样式清理指南

做编辑和文档整理这些年,经手过的Word文档里最让人头疼的隐形炸弹,就是那些密密麻麻的超链接。从网页上粘一段资料进来,网址自动变蓝加下划线;别人发来的合同文档里,几十条引用链接躲在不同段落里;帮导师整…

作者头像 李华
网站建设 2026/10/10 3:39:04

ADB 调试桥完全指南:从环境搭建到自动化脚本实战

1. 为什么 ADB 值得花时间学:从调试工具到效率杠杆很多人第一次接触 ADB,是在手机连不上电脑、想传个文件却找不到数据线驱动的时候。当时我也一样,以为它就是个“安卓版的命令行传文件工具”,直到后来做自动化测试、批量装应用、…

作者头像 李华
网站建设 2026/10/10 3:38:50

Spring Boot+微信小程序旧衣回收系统:从设计到落地全解析

简介:这是一份基于微信小程序的旧衣回收系统毕业设计论文文档,面向计算机相关专业学生及需要完成类似课题的开发者。内容涵盖系统首页、用户管理、回收人员管理、旧衣信息管理、回收预约与派单、回收订单、积分商品与兑换等核心模块,完整展示…

作者头像 李华
网站建设 2026/10/10 3:38:14

关闭Ubuntu终端自动进入bash:四种方法详解

在 Ubuntu 上,打开终端自动进入 bash 环境,这个默认行为太常见了,常见到大家平时根本不会多想。可一旦你想换 zsh、想进一个“纯净终端”,或者发现每次打开终端都被.bashrc里的脚本“绑架”到某个目录,问题就来了&…

作者头像 李华
网站建设 2026/10/10 3:35:20

PHP与ASP.NET谁更快?从运行时模型与压测看执行速度真相

聊到Web开发,PHP和ASP.NET的“速度之争”,我几乎在每个技术社区都能见到。真正两边都深度做过项目的开发者其实不算多,多数讨论停留在文档和基准测试网站上的数据。恰好我前后两个主力项目分别用这两套技术栈——一个是高并发的API服务&#…

作者头像 李华