
다음 파일이 있습니다 basic.json
.
{
"user": "user",
"pass": "password"
}
다음과 같이 Base64로 인코딩하려고 합니다.
"Basic dXNlcjpwYXNzd29yZA=="
나는 꽤 가깝다고 생각한다:
echo Basic $(echo $(cat basic.json | jq '.user'):$(cat basic.json | jq '.pass') | base64)
나는 사용했다여기에서 jq 액세스 방법을 찾을 수 있습니다..
나는 사용했다여기에서 base64 방법을 찾으세요..
하지만 결과는 틀렸습니다.
Basic InVzZXIiOiJwYXNzd29yZCIK
-e
기사에 언급된 플래그를 사용해 보았습니다 .
echo Basic $(echo $(cat basic.json | jq '.user'):$(cat basic.json | jq '.pass') | base64 -e)
하지만 다음과 같은 오류가 발생합니다.
base64: 잘못된 옵션 -- 'e'
내가 어디서 잘못됐나요?
미리 감사드립니다.
내 솔루션
명령은 다음과 같이 끝납니다.
RUN echo "map \"\" \$basicAuth {\n\
\tdefault $(jq '"Basic " + ("\(.user):\(.pass)" | @base64)' basic.json);\n\
}" > basic.conf
내 basic.conf
파일이 마침내 올바른 기본 인증을 갖게 되었습니다.
map "" $basicAuth {
default "Basic dXNlcjpwYXNzd29yZA==";
}
다들 감사 해요
답변1
jq
를 포함하여 다양한 출력 형식 필터가 제공됩니다 @base64
.
예를 들어, 전체 JSON 객체를 file 로 인코딩하려면 basic.json
다음과 같이 사용할 수 있습니다.
$ jq -r '. | @base64 | "Basic \(.)"' basic.json
Basic eyJ1c2VyIjoidXNlciIsInBhc3MiOiJwYXNzd29yZCJ9
이 "Basic \(.)"
필터는 원하는 형식을 얻기 위해 문자열 보간만 사용합니다.
이러한 필터를 보다 일반적으로 사용하면 특정 값을 인코딩할 수 있습니다.
$ jq '.pass |= @base64' basic.json
{
"user": "user",
"pass": "cGFzc3dvcmQ="
}
답변2
jq
AND 연산자를 사용합니다 @base64
.
<basic.json jq '"Basic " + ("\(.user):\(.pass)"|@base64)'
"Basic dXNlcjpwYXNzd29yZA=="
user
그리고 그 값은 연산자 에게 pass
문자열로 제공됩니다. base64
이제 남은 것은 간단한 문자열 연결뿐입니다.