在 dmenu 中隐藏密码

在 dmenu 中隐藏密码

我是 dmenu 新手。我正在尝试运行需要sudodmenu 权限的程序。我已经关注了这个链接。所以./dpass我的文件夹中有脚本,bin上面写着:

#!/bin/bash
dmenu -p "$1" <&- && echo

我还运行了命令:

$ export SUDO_ASKPASS=/home/username/bin/dpass

bin所以现在我的文件夹中有一个名为shutdown.它说:

#!/bin/bash
sudo -A shutdown -h now

当我尝试通过 dmenu 运行它时,它确实要求我输入密码,但问题是当我输入密码时,密码不会隐藏。我发现这真的不安全,因为任何人都可以看到我的密码。有没有办法在 dmenu 中隐藏密码?

答案1

&& echo尝试从调用末尾删除dmenu

#!/bin/bash
dmenu -p "$1" <&-

这应该禁用用户输入内容的回显dmenu。此方法在标题为:的博客文章中进行了介绍:从 dmenu 输入密码

摘抄
$ cat dpass
#! /bin/sh

# shellcheck disable=2046
caller="$(ps -o comm= -p $(ps -o ppid= -p $$))"
prompt="${1:-[$caller]}"
promptfg=black promptbg=red hidden=white
font="Liberation Sans-20:Bold"

dmenu -p "$prompt" -fn "$font" \
  -nf "$hidden" -nb "$hidden" -sf "$promptfg" -sb "$promptbg" <&-
  1. 如果没有传递参数,它将向调用应用程序设置提示(红色部分)。因此用户总是会收到某种提示。
  2. 它删除了尾随&& echo语句,因此它适用于其他密码处理程序。

答案2

灵感来自熔断团队,我写了一个名为stprompt的脚本:

#!/bin/bash

prompt="$1"
answer=$(st -o "-" -g 100x5 -c st-prompt sh -c "echo -n '$prompt: '; read -s ANSWER; echo \$ANSWER")
echo "${answer#*: }" | tr -d '\r'

该脚本提示用户,隐藏输入,并将输出响应。

对于您的具体情况,您可以按以下方式使用此脚本:

sudopgm==$(echo "${options[@]}" | dmenu -i -p 'Programs that need sudo: ')
SUDO_ASKPASS=$(stprompt "sudo pass") sudo -A $sudopgm

在此输入图像描述 在此输入图像描述

有关我如何stprompt在我的应用程序中使用的更多信息点文件自述文件,以及我的示例用法dmenu_ibmicmd脚本。

正如Fuseteam所说,st是一个终端。您可以将其替换为您最喜欢的终端。

答案3

解决方法可能是dterm运行一个名为 say 的脚本:

#!/bin/bash
command="$@";st -- $command

这样当你运行时dterm sudo command就会弹出一个终端来输入密码

作为额外的好处,您还可以通过 dmenu 运行任何终端应用程序

ps st 是一个终端,它可以替换为任何接受 -e 或 -- 参数的终端

pps 这假设您可以通过 dmenu 执行脚本

相关内容