本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
systemd-ask-password — 向用户索要密码
systemd-ask-password [OPTIONS...] [MESSAGE]
systemd-ask-password
通过向用户显示 [MESSAGE] 消息的方式索要密码或口令。
当在TTY上运行时,它将从TTY读取密码,
然后再将密码打印到标准输出。
当不在TTY上运行或使用 --no-tty
选项时,
它将使用全系统通用的密码查询机制,
从而允许活动用户通过多种密码代理进行应答(参见下文)。
此工具主要用于 向全系统范围索要不特定于某个账户的密码。 例如: 用于解开加密硬盘的密码、 用于解开SSL证书的口令(常用于HTTP/VPN服务器)。
目前可用的密码代理如下:
一个显示启动动画的工具, 亦可用作启动时密码代理: plymouth(8)
启动时
直接在控制台上向用户索要密码的密码代理:
systemd-ask-password-console.service
通过
wall(1)
消息获取密码的密码代理:
systemd-ask-password-wall.service
可配合 systemctl(1) 命令临时启动的TTY密码代理
能够被临时启动 以处理一系列连续请求的命令行密码代理: systemd-tty-ask-password-agent --query
因为回答全系统通用的密码查询是一个特权操作, 所以上述所有密码代理(最后一个除外)都只能用于拥有特权的系统服务。 注意,因为最后一个密码代理实际上也需要较高的权限, 所以在实践中应该使用例如 sudo(8) 这样的方式来运行。
此外, 还可以根据 systemd Password Agent Specification 规范编写其他类型的密码代理。
在TTY上输入密码时,用户可以按一下TAB键, 这样在输入密码时就不会显示星号。 在开始输入密码前按退格键(Backspace)也有同样的效果。
能够识别的命令行选项如下:
--icon=
¶在询问密码的同时显示一个图标, 仅用于图形界面的密码代理。 图标名称必须遵守 XDG 图标命名规范。
--id=
¶为此次密码索要动作指定一个标识符,
以辨别此密码适用于密码代理的哪个请求。
其中必须包含
请求密码的子系统以及密码的作用对象。
例如:
"--id=cryptsetup:/dev/sda5
"
--keyname=
¶指定一个
用于缓存密码的内核密钥环(keyring)名称。
设置此选项表示
尽可能将收集到的密码缓存到指定的内核密钥环(keyring)中(该密钥环必须属于root用户)。若与
--accept-cached
一起使用,
则表示
首先从指定的内核密钥环缓存中查找所需密码,
仅在找不到的情况下才提示用户输入,
这样当多个对象都使用同一个密码时,
就可以避免让用户反复输入同一个密码。
密码的缓存有效期是2.5分钟,
超时后将被删除。
同一个内核密钥环中可以缓存多个密码。
可以使用
keyctl(1)
工具访问内核密钥环中缓存的密码。
例如: "--keyname=cryptsetup
"
--timeout=
¶设置等待用户输入密码的最大时长。 默认"90s",设为"0"表示无限等待。
--echo
¶直接显示用户的输入 (而不是显示为星号或者不显示), 常用于输入 无需保密的用户名。
--no-tty
¶不在当前TTY上读取密码(即使当前TTY可用), 而是从密码代理读取密码。
--accept-cached
¶允许从密码缓存中查找 先前曾经输入过的密码。
--multiple
¶与
--accept-cached
连用,
表示可以接收多个密码(每行输出一个密码)。
--no-output
¶不在标准输出上打印密码。
此选项常用于
仅希望将密码存储到内核密钥环中(--keyname
),
而不希望显示在屏幕上或记录到日志中。
-h
, --help
¶