"passwd root --stdin"은 내 비밀번호를 무엇으로 설정합니까?

"passwd root --stdin"은 내 비밀번호를 무엇으로 설정합니까?

난 달린다:

sshpass -p 'OldPassword' ssh -o StrictHostKeyChecking=no [email protected] 'echo "Te3EQeF2U!-Em_C3eBU6A&a=u2$e28*c" | passwd root --stdin'

내 비밀번호에 특수 문자가 포함 echo "Te3EQeF2U!-Em_C3eBU6A&a=u2$e28*c"되어 있다는 것을 몰랐습니다 .bash: !-Em_C3eBU6A: event not found

이를 바탕으로 누구든지 내 비밀번호를 무엇으로 설정했는지 알아낼 수 있나요?

답변1

시도해 볼 수 있나요 Te3EQeF2U!-Em_C3eBU6A&a=u2*c? 이것은 가상 머신에서 복사할 때 효과적이었습니다.

참고로 저는 이렇게 했습니다.

CentOS 가상 머신에서:

$ mv /usr/bin/passwd /usr/bin/passwd.orig
$ vim /usr/bin/passwd
<INSERT>
while read line
do
  echo "$line" >> /tmp/passwd
done < /dev/stdin
<SAVE>

이는 바이너리를 동일한 입력을 받아 간단히 쓰는 바이너리 passwd로 대체합니다 .passwd --stdin/tmp/passwd

그러다가 달려가서 들어 sshpass -p '<VM-PASSWORD>' ssh -o StrictHostKeyChecking=no root@<VM-IP> 'echo "Te3EQeF2U!-Em_C3eBU6A&a=u2$e28*c" | passwd root --stdin'갔어Te3EQeF2U!-Em_C3eBU6A&a=u2*c/tmp/passwd

완료되면 passwd원본 바이너리를 다시 옮기십시오.

답변2

그냥 사용하면 안 되나요 echo 'root:password' | chpasswd(또는 ... | chpasswd -e비밀번호가 이미 암호화된 경우)? 그것이 chpasswd목적입니다. man chpasswd자세한 내용 및 기타 옵션을 확인하세요 .

또한 문자열을 올바르게 인용하거나 암호를 입력해야 합니다. ( 비어 있을 수 있는 $e28변수의 값으로 확장됨 ) 을 포함하므로 큰따옴표로 묶는 것을 원하지 않을 것입니다 .$e28

$따라서 as 를 이스케이프 처리 \$하거나 전체 비밀번호 문자열을 작은따옴표로 묶어야 합니다. ssh명령이 이미 작은따옴표로 묶여 있기 때문에 이는 약간 어렵습니다 . 다행스럽게도 작은따옴표 안에 작은따옴표를 삽입하는 표준적이고 안정적인 방법이 있습니다. 즉, 를 사용하는 것입니다 '\''.

sshpass -p 'OldPassword' ssh -o StrictHostKeyChecking=no \
    [email protected] 'echo '\''root:Te3EQeF2U!-Em_C3eBU6A&a=u2$e28*c'\'' | chpasswd'

더 좋은 점은 다음과 같이 사용하는 것이 더 간단할 것입니다.

echo 'root:Te3EQeF2U!-Em_C3eBU6A&a=u2$e28*c' | ssh [email protected] chpasswd

관련 정보