在 macOS 终端中,密码处理主要分为以下几大类:

- 查看或修改系统密码:如登录密码、钥匙串密码。
- 需要输入密码执行的命令:使用
sudo提升权限。 - 自动化脚本中的密码处理:如何安全地在脚本中处理密码。
- 网络相关的密码:如 Wi-Fi、SSH 密钥。
查看/修改系统密码
a) 修改你的登录密码 (用户密码)
这是最直接的操作,在终端中,你可以使用 passwd 命令来修改你当前用户的密码。
passwd
执行后,终端会提示你输入当前密码,然后要求你输入两次新密码,输入时,屏幕上*不会显示任何字符(包括星号 ``)**,这是正常的安全设计。
# 示例输出 Changing password for user your_username. Current password: # 在这里输入你的旧密码,无显示 New password: # 在这里输入新密码,无显示 Retype new password: # 再次输入新密码,无显示 passwd: password successfully updated for your_username.
b) 重置忘记的登录密码
如果你忘记了登录密码,可以通过 macOS 的恢复模式来重置,这不需要终端命令,但是一个非常重要的流程:
- 关机。
- 开机,并在看到苹果标志或旋转地球图标时,立即按住
Command + R键,直到看到 macOS 实用工具窗口。 - 在实用工具窗口中,选择 “Utilities” > “Terminal”。
- 在打开的终端中,输入以下命令来重置密码(将
你的用户名替换成你的实际用户名):resetpassword
- 按照屏幕上的提示操作,选择你的系统盘,选择用户名,然后输入并确认新密码。
- 完成后,重启电脑即可用新密码登录。
使用 sudo 执行需要管理员权限的命令
这是最常见的情况,当你执行一个需要管理员权限的命令时,系统会要求你输入当前用户的密码。

sudo 命令简介
sudo (superuser do) 允许授权用户以超级用户或另一个用户的身份执行命令。
# 示例:安装一个软件(使用 Homebrew) brew install wget # 如果权限不足,会提示你输入密码 Password: # 在这里输入你的登录密码,无显示
重要提示:
- 输入时无回显:和
passwd一样,输入密码时屏幕上什么都不会显示,这是正常的。 - 5分钟缓存:在你成功输入一次密码后,接下来的 5 分钟内再次使用
sudo执行命令,通常不需要再次输入密码,这个时间可以延长,但默认是 5 分钟。 - 查看当前用户:
whoami命令可以显示当前登录的用户名。 - 查看
sudo权限:sudo -l命令会列出当前用户被允许使用sudo执行哪些命令。
在脚本中安全地处理密码
强烈不推荐在脚本中直接以明文形式写入密码,因为脚本文件可能会被他人读取。
a) 不推荐的做法(危险!)
#!/bin/bash # 这是一个非常危险的做法! PASSWORD="my_secret_password" echo "The password is: $PASSWORD"
b) 推荐的做法:使用 read -s 命令
如果你需要脚本在运行时动态获取密码,可以使用 read 命令的 -s 选项,它可以在用户输入时不显示任何字符。
#!/bin/bash echo "Please enter your password:" read -s PASSWORD # -s 选项表示 "silent"(静默模式) echo # 换行 # 现在你可以使用 $PASSWORD 变量了, echo "Password received. Verifying..." # some_command -p "$PASSWORD"
如何使用:

- 将上述代码保存为一个文件,
script.sh。 - 给文件添加可执行权限:
chmod +x script.sh。 - 运行脚本:
./script.sh。 - 脚本会提示你输入密码,输入时屏幕上不会显示任何内容。
网络相关的密码
a) 查看/连接 Wi-Fi 密码
macOS 将 Wi-Fi 密码存储在系统的“钥匙串”中,你可以使用 security 命令来提取它。
步骤:
-
你必须连接到该 Wi-Fi 网络,因为你需要知道它的名称(SSID)。
-
使用
airport命令获取当前 Wi-Fi 的 SSID,如果你的 macOS 版本较新,可能需要先启用airport:# 启用 airport(如果需要) sudo nvram wifi.BluetoothProfileParameterController="0"
# 获取当前连接的 Wi-Fi 名称 /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | grep " SSID" | awk -F SSID '{ print $2 }'假设获取到的 SSID 是
MyHomeWiFi。 -
使用
security命令提取密码:security find-generic-password -wa "MyHomeWiFi"
security: macOS 的安全命令行工具。find-generic-password: 查找通用密码项。-wa:-w表示 "write"(输出密码),-a表示 "account"(指定账户/网络名称)。"MyHomeWiFi": 你要查询的 Wi-Fi 网络名称。
执行后,系统可能会再次要求你输入你的登录密码来授权访问钥匙串,输入后,就会在终端中显示出该 Wi-Fi 的密码。
b) SSH 密钥对 (更安全的替代方案)
对于 SSH 登录,最佳实践是使用公钥/私钥对,而不是密码,这更安全,因为你可以禁用密码登录。
-
生成密钥对:
ssh-keygen -t ed25519 -C "your_email@example.com"
这会在
~/.ssh/目录下生成id_ed25519(私钥)和id_ed25519.pub(公钥)。 -
将公钥复制到远程服务器:
ssh-copy-id user@remote_server_ip
这条命令会提示你输入远程服务器的登录密码,然后将你的公钥添加到服务器的
~/.ssh/authorized_keys文件中。
完成之后,你就可以通过 ssh user@remote_server_ip 无密码登录了。
| 场景 | 命令/方法 | 关键点 |
|---|---|---|
| 修改自身密码 | passwd |
输入时无回显,需要当前密码。 |
| 忘记登录密码 | 恢复模式 (Command + R) |
终端命令 resetpassword,无需知道原密码。 |
| 提权执行命令 | sudo <command> |
输入登录密码,有5分钟缓存期。 |
| 脚本安全输入 | read -s PASSWORD |
运行时交互式输入,避免密码硬编码。 |
| 获取 Wi-Fi 密码 | security find-generic-password -wa "SSID" |
需要先连接到该网络,并输入登录密码授权。 |
| SSH 安全登录 | ssh-keygen / ssh-copy-id |
使用密钥对替代密码,更安全。 |
希望这份详细的指南能帮助你更好地理解和使用 macOS 终端中的密码相关操作!
