값을 내보내기 전에 사용자 이름과 비밀번호를 설정하는 이 파일이 있습니다.
#!/bin/bash
echo -n "User:";
read user
echo -n "Password:";
read -s password
export http_proxy=http://$user:$password@$domain:$portnum
if curl -silent http://www.google.com | grep authentication_failed;
then
echo NO CONNECT
unset http_proxy
else
echo OK
fi
history
, printenv
, 에서는 export -p
내가 설정한 값을 볼 수 있습니다.
또한 내 비밀번호를 그대로 포함하는 값이 아닌 $password에서 암호화된 형식의 비밀번호를 사용하고 싶습니다.
나는 openssh를 사용하여 비밀번호를 솔트하거나 Perl의 crypt()를 사용하여 해시를 인쇄하는 데 익숙하지만 내 목적으로는 사용할 수 없습니다. 어떤 제안이 있으십니까?
답변1
언급한 문제를 재현할 수 없습니다. history
명령 출력에 비밀번호가 표시됩니다.
암호는 출력에 표시 printenv
되고 export -p
예상대로 작동합니다. 이 명령은 문자열을 입력하는 환경 변수를 표시합니다 http_proxy
.
환경 변수는 하위 프로세스에 의해 자동으로 상속되지만 다른 프로세스에서는 상속되지 않습니다. 동일한 보안 도메인 내의 프로세스에만 표시되므로 이것이 왜 큰 문제라고 생각하는지 이해가 되지 않습니다.
그러나 환경 변수에 넣는 것을 중단하고 대신 일반 쉘 변수를 사용할 수 있습니다. 그러면 하위 프로세스에서 상속되지 않습니다. 아마도 컬이 환경 변수에 액세스하기를 원할 것이므로 다른 모든 명령이 아닌 해당 명령에만 환경 변수를 전달할 수 있습니다.
#!/bin/bash
echo -n "User:";
read user
echo -n "Password:";
read -s password
proxy="http://$user:$password@$domain:$portnum"
if http_proxy="$proxy" curl -silent http://www.google.com | grep authentication_failed;
then
echo NO CONNECT
else
echo OK
fi
답변2
민감한 정보를 전달하고 자주 사용하는 경우 openssl을 사용하여 암호화하는 것이 더 나을 것입니다.
같은 것을 넣어
#create key as follows - will prompt for password
#echo -n 'secret you want encrypted' | openssl enc -aes-256-cbc -a -salt -pbkdf2|base64
export MY_SECRET='VTJGc2RHVmtYMTlzVnBGWXNYUitLWlpYT3BWdStaQXJXeUVwc1JORnFsNWswZXJKT1dkRWpsWkxLWVFnK1hONQo='
.bashrc에 들어가면 비밀이 필요한 어느 곳에서나 액세스할 수 있는 암호화된 환경 변수가 제공되며, 환경 변수를 생성할 때 사용한 비밀번호를 묻는 메시지가 표시됩니다.
위의 예에서는 "비밀"입니다.
액세스하는 명령은 다음과 같습니다
`echo $MY_SECRET|base64 --decode|openssl enc -aes-256-cbc -a -d -salt -pbkdf2 `
예를 들어
xfreerpd /parameters.... /p:`echo $MY_SECRET|base64 --decode|openssl enc -aes-256-cbc -a -d -salt -pbkdf2`
쿼리의 경우 환경 변수를 생성하고 환경 변수에 비밀번호를 작성합니다.
다음과 같이 변수를 생성할 수 있습니다.
password_encrypted=`echo -n 'secret you want encrypted' | openssl enc -aes-256-cbc -a -salt -pbkdf2|base64`
그런 다음 다음과 같이 사용하십시오.
export http_proxy=http://$user:`echo $password_encrypted|base64 --decode|openssl enc -aes-256-cbc -a -d -salt -pbkdf2 `@$domain:$portnum
base64 부분은 변수를 설정할 수 있도록 하기 위한 것입니다.
MY_SECRET='VTJGc2RHVmtYMTlzVnBGWXNYUitLWlpYT3BWdStaQXJXeUVwc1JORnFsNWswZXJKT1dkRWpsWkxLWVFnK1hONQo='
그리고 명령 기록 등에 비밀을 가두지 마십시오.
비밀을 생성할 때 Base64 출력에 여러 줄이 포함되는 경우가 있으므로 변수를 래핑해야 합니다.
echo -n 'secret you want encrypted' | openssl enc -aes-256-cbc -a -salt -pbkdf2|base64
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
VTJGc2RHVmtYMTlzVnBGWXNYUitLWlpYT3BWdStaQXJXeUVwc1JORnFsNWswZXJKT1dkRWpsWkxL
WVFnK1hONQo=
#take the above line break out
MY_SECRET='VTJGc2RHVmtYMTlzVnBGWXNYUitLWlpYT3BWdStaQXJXeUVwc1JORnFsNWswZXJKT1dkRWpsWkxLWVFnK1hONQo='
openssh는 암호화하고 해독할 때마다 비밀번호를 묻는 메시지를 표시합니다. 명령의 일부로 비밀번호를 제공할 수 있지만 기록 등에서 무언가를 숨기는 것뿐입니다. 보세요https://www.tecmint.com/generate-encrypt-decrypt-random-passwords-in-linux/이를 수행하기 위해 openssh를 사용하는 방법에 대한 일부 정보입니다.https://www.serverlab.ca/tutorials/linux/administration-linux/how-to-base64-encode-and-decode-from-command-line/Base64 및https://stackoverflow.com/questions/16072351/how-to-할당-an-output-to-a-shellscript-variable다양한 명령 대체 옵션의 경우 위에서 역따옴표 `를 사용했습니다.
PS 다음과 같은 기능을 추가하세요
get-key()
{
echo -n "$1"|base64 --decode|openssl enc -aes-256-cbc -a -d -salt -pbkdf2
}
bashrc를 사용하면 필요한 경우 비밀에 빠르게 액세스할 수 있습니다.
답변3
현재 사용자만 읽을 수 있는 보안 파일에 paasword를 저장해야 합니다.
그런 다음 파일 내용이 파이프로 연결되거나 대상 애플리케이션에서 제공하는 메커니즘을 사용합니다.
IMHO, 자체적으로 curl
이러한 옵션을 제공합니다.