다음과 같이 시스템에 로그인하는 명령줄 인터페이스가 있습니다.
$ cli -u username -p password
잘못된 비밀번호가 제공되면 "잘못된 자격 증명"이라는 메시지가 표시되고 올바른 비밀번호가 입력될 때까지 기다린 후 종료되지 않습니다. 올바른 비밀번호를 입력하면 메시지가 표시되지 않고 바로 로그인됩니다.
사용자 입력을 기다리지 않고 비밀번호가 틀리면 명령을 종료하고 싶습니다.
아이디어는 Credentials 키워드를 찾고 발견되면 명령을 종료하는 것입니다.
$ cli -u username -p password | grep Credentials
어떻게 해야 하나요?
답변1
배경
나는 귀하의 유틸리티를 다음과 같이 cli
모델링했습니다 .
$ cat cli
#!/bin/bash
while IFS= read -r line; do
if [ "$line" == "password" ]; then
break
else
echo 'Credentials incorrect'
fi
done
사용grep
grep -m1 ...
그런 다음 첫 번째 일치 항목을 찾은 후 브레이크아웃을 사용할 수 있습니다 . 메서드 -m1
는 첫 번째 일치 후에 중지됩니다.
$ ./cli | grep -m 1 "Credential"
blah
Credentials incorrect
$
좋은 비밀번호
$ ./cli | grep -m 1 "Credential"
password
$
사용sed
비슷한 접근 방식이 사용됩니다 sed
.
$ ./cli | sed '/Credential/ q'
blah
Credentials incorrect
$
좋은 비밀번호
$ ./cli | sed '/Credential/ q'
password
$
답변2
프로세스를 종료하는 대신 다음과 같은 것을 확인할 수 있습니다.연결을 끊기 전에 시도해 보세요.구성 파일에서. 저는 보통 SSH 로그인 시도를 제한하기 위해 이렇게 합니다.