'예상'이 서버 응답 문자열과 일치하지 않습니다.

'예상'이 서버 응답 문자열과 일치하지 않습니다.

나는 bash 스크립트를 사용하여 텔넷 서버에 로그인하고 많은 명령을 실행하고 있습니다. 다음과 같이 보입니다:

로그인하고 .sh를 실행하세요.

#!/bin/bash

unset TELNET_USER_NAME_STRING
unset TELNET_PASSWORD_STRING
unset TELNET_USER_NAME
unset TELNET_PASSWORD

TELNET_USER_NAME_STRING=`cat SAP_output`
TELNET_PASSWORD_STRING="Password:"

TELNET_USER_NAME="UserNam3\r"
TELNET_PASSWORD="Passw0rd\r"

# Expect script starts here
expect <<- DONE
        spawn telnet localhost 50008
        expect '$TELNET_USER_NAME_STRING'
        send "$TELNET_USER_NAME"
        sleep 3
        expect "$TELNET_PASSWORD_STRING"
        send "$TELNET_PASSWORD"
        sleep 3
        spawn ls
        expect eof
DONE

어디

SAP_출력:

Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

   ***********************************************
   **********************************************
   ****###*******####*****#######**************
   **##***##****##**##****##****##************
   ***##*******##****##***##****##**********
   *****##*****########***######***********
   ******##****##****##***##*************
   **##***##**##******##**##************
   ****###****##******##**##**********
   **********************************
   ********************************

   Telnet Administration
   SAP Java EE Application Server v7.50


User name:

텔넷 로그인 후 배너를 받았지만 그대로 유지됩니다(문자열이 일치하지 않는 것처럼). 정확한 응답 대신 와일드카드를 사용하는 것이 더 안전합니까(그리고 "사용자 이름:"만 일치)?

답변1

그것을 알아 냈습니다 :

TELNET_USER_NAME_STRING='*name:*'

TELNET_PASSWORD_STRING='*assword:*'

TELNET_USER_NAME='UserNam3\r'
TELNET_PASSWORD='Passw0rd\r'

# Expect script starts here
expect <<- DONE
        spawn telnet localhost 50008
        expect '$TELNET_USER_NAME_STRING'
        send "$TELNET_USER_NAME"
        expect '$TELNET_PASSWORD_STRING'
        send "$TELNET_PASSWORD"
        # Check if we're logged in
        expect eof
DONE

전체 배너 대신 와일드카드를 사용하고 줄 문자 "\r"을 반환하여 캐리지 리턴을 "누르십시오".

편집하다:

이것더 우아한 답변입니다.

관련 정보