다음 스크립트(Ubuntu 22.04에서 실행)를 사용하여 SSH를 통해 원격 서버에 사용자 계정을 추가하려고 합니다.
#!/bin/bash
protect="y"
ssh -i ssh_key [email protected] <<END
sudo deluser testuser
if [[ "$protect" =~ ^[yY]*$ ]]; then sudo useradd -p $(openssl passwd -1 "password") testuser && echo "User added successfully"; fi
END
read -n 1 -srp "Press any key to exit."
User added successfully
확인 메시지가 표시되며 정상적으로 사용자가 추가됩니다. 단, 해당 자격 증명을 사용하여 계정에 로그인할 수는 없습니다.
서버에서 직접 이 명령을 하나씩 실행하려고 하면 모든 것이 잘 작동하고 계정에 로그인할 수 있으므로 인용 이스케이프 문제일 것이라고 생각하여 다음을 포함한 몇 가지 변형을 시도했습니다.
\""password"\"
"\"password"\"
\""password\""
"\"password\""
그러나 그들 중 누구도 일하지 않았습니다.
도와주세요.
답변1
명령을 실행할 때마다 다른 출력이 나타납니다. 나는 이 명령을 사용한다이 답변에서데모 질문:
openssl passwd -6 -salt xyz password
$
다음으로 시작하는 출력의 변수는 다음과 같이 대체됩니다.
$ openssl passwd -6 -salt xyz password
$6$xyz$ShNnbwk5fmsyVIlzOf8zEg4YdEH2aWRSuY4rJHbzLZRlWcoXbxxoI0hfn0mdXiJCdBJ/lTpKjk.vu5NZOv0UM0
$ bash << EOF
echo $(openssl passwd -6 -salt xyz password)
EOF
/lTpKjk.vu5NZOv0UM0
openssl
원격 호스트에서 다음 명령을 실행할 수 있습니다 .
#!/bin/bash
protect="y"
if [[ "$protect" =~ ^[yY]*$ ]]; then
ssh -i ssh_key [email protected] 'sudo useradd -p $(openssl passwd -1 "password") testuser && echo "User added successfully"'
fi
read -n 1 -srp "Press any key to exit."
다음의 차이점을 참고하세요.
$ ssh HOST 'echo "$(openssl passwd -6 -salt xyz password)"'
$ ssh HOST echo "$(openssl passwd -6 -salt xyz password)"