Bash 기록에서 단일 매개변수 숨기기

Bash 기록에서 단일 매개변수 숨기기

터미널에 전달된 개별 매개변수를 숨기면서도 여전히 매개변수를 명령에 전달하는 방법이 있습니까?

이 문제셸을 통해 일반 텍스트 비밀번호를 전달할 때 발생하는 문제가 해결되었습니다.

그러나 비밀번호가 아니더라도 LDAP에서 사용할 수 있는 개인 정보(비밀번호 제외)를 포함하여 선택적 매개변수가 CLI 기록에서 숨겨질 수 있습니다.

그래서 다음과 같은 것이 있습니까?

주문하다:

program argument1 argument2 {{argument3}} argument4

역사:

program argument1 argument2 {{}} argument4

...그래서 argument3로 전달되지만 BASH 기록에는 program표시됩니까 ?{{}}

즉, 인라인 편집을 위해 특정 매개변수를 표시할 수 있습니까?

이것이 가능하지 않다면,RFC왜 안되나요?

답변1

Bash에는 개별 명령줄 인수를 숨기는 기능이 없다고 생각합니다. 이는 상당히 좁은 경우인 것으로 보이며 거의 모든 특수 문자가 이미 일부 용도(셸에서 또는 셸에서 실행되는 도구에서)를 가지고 있다는 점을 고려하면 이에 대한 구문을 선택하기가 어렵습니다.

그러나 Bash에는 공백으로 시작하는 전체 명령을 기록에서 완전히 제외하는 기능이 있습니다. 정확히 당신이 요구하는 것은 아니지만 적어도 공백을 입력하는 것이 더 쉽습니다. HISTCONTROL=ignorespace설정을 통해 활성화 하거나 HISTCONTROL=ignoreboth. (내가 사용하는 대부분의 시스템에서는 이 기능이 활성화되어 있는 것 같지만 ignoreboth일반적으로 기본적으로 활성화되어 있는지는 확실하지 않습니다.)

또는 보다 일반적인 제외 메커니즘을 사용하여 HISTIGNORE=" *"에뮬레이트하도록 설정 ignorespace하거나 공간에 관계없이 제외하는 데 사용하는 특정 명령과 일치하는 일부 패턴을 생각해 낼 수 있습니다.


즉, 명령줄 인수로 민감한 데이터를 전달하는 경향이 있다면 명령 기록을 파일( unset HISTFILE)에 저장하지 않는 것이 가장 좋습니다. 그렇지 않으면 명령/인수를 제외로 표시하는 것을 잊어버릴 위험이 있습니다. 또한 실행 중인 프로세스의 명령줄은 일반적으로 시스템의 모든 사용자에게 표시됩니다. 이는 물론 문제를 제한하는 다른 방법이 있지만 비밀번호 이외의 다른 민감한 데이터에도 똑같이 문제가 됩니다.

답변2

Bash에서는 설정합니다.

HISTIGNORE="*commandhere*"

예를 들어 다음은 fortune기록에서 제외되지만 저장됩니다 fortune -l.

HISTIGNORE="*secret.server.com*:ytalk*:fortune"

원천

관련 정보