터미널 비밀번호 에코 문자 변경

터미널 비밀번호 에코 문자 변경

아치 리눅스에서 sudo를 사용할 때 as 대신 에 비밀번호 문자를 어떻게 에코합니까 *?

설치해서 사용 nerd-fonts하고 있어요alacritty터미널 에뮬레이터.

visudo를 사용하여 sudoers 파일을 수정하고 다음을 사용하여 에코 문자를 활성화했습니다.

Defaults env_reset,pwfeedback

답변1

sudo자신만의 비밀번호 입력 루틴 에서 ,*하드코딩되어 있다, 그러나 sudo그래픽 명령(예: )을 포함한 외부 명령을 사용하여 비밀번호를 입력 ssh-askpass하거나 /usr/libexec/seahorse/ssh-askpass직접 구현할 수도 있습니다.

이제 또한 *ASCII 세트의 일부이고 시스템의 모든 로케일에서 일정해야 하지만 매우 적은 수의 문자 세트에서는 발견되지 않으며 해당 인코딩은 로케일에 따라 변경됩니다. UTF-8에서는 3바이트로 인코딩되므로 멀티바이트 문자를 처리하고 이를 사용자 로케일로 인코딩할 수 있는 루틴이 필요하며, 이 클래스 문자가 없는 로케일에서는 문자가 사용될 때 다른 문자로 대체됩니다.

예를 들어 다음과 같이 작성할 수 있습니다.

#! /usr/bin/perl
use Term::ReadPassword;
use Encode::Locale;
use Encode;

$Term::ReadPassword::USE_STARS = 1;
my $bullet = encode(locale => "\N{BLACK CIRCLE}");
$Term::ReadPassword::STAR_STRING = $bullet eq '?' ? '*' : $bullet;

$pass = read_password(join " ", @ARGV);
if (defined($pass)) {
  print "$pass\n";
} else {
  exit(1);
}

실행 export SUDO_ASKPASS=/path/to/that-script하거나 Path askpass /path/to/that-script추가 /etc/sudo.conf하고 sudo실행하십시오 -A.

$ sudo -A id -u
[sudo] password for you: ●●●●●●●●●●●●●●
0

내가 아는 한 Term::ReadPassword는 멀티바이트를 지원하지 않습니다. 이 프롬프트에 멀티바이트 문자를 입력하면 문자에 있는 바이트 수만큼 글머리 기호가 표시됩니다. 그래도 여전히 잘 작동할 것입니다.

관련 정보