菜鸟科技网

Mac终端命令如何查看或修改密码?

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

Mac终端命令如何查看或修改密码?-图1
(图片来源网络,侵删)
  1. 查看或修改系统密码:如登录密码、钥匙串密码。
  2. 需要输入密码执行的命令:使用 sudo 提升权限。
  3. 自动化脚本中的密码处理:如何安全地在脚本中处理密码。
  4. 网络相关的密码:如 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 的恢复模式来重置,这不需要终端命令,但是一个非常重要的流程:

  1. 关机
  2. 开机,并在看到苹果标志或旋转地球图标时,立即按住 Command + R 键,直到看到 macOS 实用工具窗口。
  3. 在实用工具窗口中,选择 “Utilities” > “Terminal”
  4. 在打开的终端中,输入以下命令来重置密码(将 你的用户名 替换成你的实际用户名):
    resetpassword
  5. 按照屏幕上的提示操作,选择你的系统盘,选择用户名,然后输入并确认新密码。
  6. 完成后,重启电脑即可用新密码登录。

使用 sudo 执行需要管理员权限的命令

这是最常见的情况,当你执行一个需要管理员权限的命令时,系统会要求你输入当前用户的密码。

Mac终端命令如何查看或修改密码?-图2
(图片来源网络,侵删)

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"

如何使用:

Mac终端命令如何查看或修改密码?-图3
(图片来源网络,侵删)
  1. 将上述代码保存为一个文件,script.sh
  2. 给文件添加可执行权限:chmod +x script.sh
  3. 运行脚本:./script.sh
  4. 脚本会提示你输入密码,输入时屏幕上不会显示任何内容。

网络相关的密码

a) 查看/连接 Wi-Fi 密码

macOS 将 Wi-Fi 密码存储在系统的“钥匙串”中,你可以使用 security 命令来提取它。

步骤:

  1. 你必须连接到该 Wi-Fi 网络,因为你需要知道它的名称(SSID)。

  2. 使用 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

  3. 使用 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 终端中的密码相关操作!

分享:
扫描分享到社交APP
上一篇
下一篇