예를 들어 Firewall-cmd(실행하려면 루트 권한이 필요함)를 사용할 때 옵션을 자동 완성하려고 하면(예: "--perm" 쓰기) 창에 프롬프트가 나타납니다(따라서 터미널의 sudo와는 다릅니다). 비밀번호"를 입력하고 Tab 키를 누름). 자동 완성을 사용할 때마다 이전에 비밀번호를 입력하거나 sudo를 사용하여 명령을 실행했더라도(특정 시간에 다시 메시지를 표시하지 않도록 구성됨) 이런 일이 발생합니다.
일정 기간 동안 비밀번호를 영구적으로 입력하거나 자동 완성에 대한 인증을 완전히 비활성화할 수 있는 방법이 있습니까(여전히 실제 실행 프로그램에 인증하고 싶습니다)?
확실한 해결책은 루트로 로그인하는 것입니다(su 또는 sudo -i 사용). 하지만 저는 이 작업을 피하고 싶습니다.
나는 bash를 사용하고 있고 내 소스 코드는 .bashrc
Debian 패키지와 함께 제공되는 표준 파일입니다.bash_completion
bash-completion
. /etc/bash_completion
내 것을 사용할 수 있습니다 .bashrc
.
실행 complete -p firewall-cmd
결과는
bash: complete: firewall-cmd: no completion specification
내가 polkit이 관련되어 있다고 생각하는 이유(원본 태그 참조)는 인증 대화를 중단할 때 표준 출력에 다음이 표시되기 때문입니다.
Authorization failed.
Make sure polkit agent is running or run the application as superuser.
답변1
일반적으로 Firewall-cmd와 같은 명령과 관련된 완료를 보려면 다음과 같은 내용이 반환될 complete -p firewall-cmd
것으로 예상합니다 complete -F _firewall_cmd firewall-cmd
. 그런 다음 다음을 _firewall_cmd
사용하여 type _firewall_cmd
기능을 확인할 수 있습니다 .
데비안의 bash 완성 패키지는 complete -D
명령을 사용하여 기본 완성 기능을 설정합니다. 이 기능은 처음 사용할 때 특정 완성 기능이 사용 가능한지 확인하고 그렇다면 로드합니다.
따라서 어떻게 설정되어 있는지 보기 전에 한 번 시험해 보는 것이 중요합니다.
firewall-cmd
이를 위해문서현재 시작에 대한 완료 기능을 정의합니다.
_firewall_cmd()
{
local cur prev words cword split
_init_completion -s || return
firewall-cmd --state 1> /dev/null || return
/usr/bin/firewall-cmd 프로그램 자체는 궁극적으로 루트 액세스와 인증이 필요한 Python 스크립트입니다. firewall-cmd --state
방화벽이 실행 중이면 호출은 true를 반환합니다. 그래서 완료 코드의 목적은 방화벽이 실행되지 않을 때 완료를 수행하지 않는 것으로 보입니다. 그러나 방화벽이 실행 중인지 확인하려면 권한이 필요하도록 작성되어 원치 않는 메시지가 표시됩니다.
firwall-cmd --state 1> /dev/null || return
완성 기능에서 해당 줄을 제거하면 비밀번호를 묻는 메시지가 표시되지 않고 더 빠르게 완료될 수 있으며 기타 일반적인 이점이 있습니다.
답변2
sudo의 nopasswd 옵션을 사용할 수 있습니다. suoders 파일에 사용자에 대한 nopasswd 옵션을 추가하기만 하면 됩니다.
예를 들어 사용자 이름이 imosdin인 경우 명령을 실행하여 sudoers의 항목을 수정 visduo
하고 아래에 언급된 항목을 추가/수정합니다.
imsodin ALL=(ALL) NOPASSWD: ALL
이제 시스템에서는 imsodin 사용자가 비밀번호를 묻지 않고 sudo를 통해 모든 명령을 실행할 수 있습니다.