예상 스크립트에 특수 문자 "~-enter"를 보냅니다.

예상 스크립트에 특수 문자 "~-enter"를 보냅니다.

나는 도움이 필요해.

나는 일상 업무를 위해 작은 테스트 스크립트를 작성했습니다.

이 스크립트에서는 서버 콘솔에 연결하겠습니다.

제가 기대하는 부분은 다음과 같습니다.

export TMPEXPECT=$(mktemp /home/user/tmp/expect.XXXXXX)
chmod 700 $TMPEXPECT

echo "Verbinde auf console..."
        cat <<< '#!/usr/bin/expect -f
spawn ssh root:ttyS'"$port"'@'"$console"'
expect {        "*gnore*" { send "i\r\r"}        }
expect {        "\n" {send "\r"}        }
expect {        "\n" {send "\r"}        }
sleep 2
expect {        "\n" {send "\r"}        }
expect {        "\n" {send "~.\r"}        }
expect eof
' > $TMPEXPECT
$TMPEXPECT

출력은 다음과 같습니다.

spawn ssh root:ttyS33@console

A non-empty Data Buffering File was found. Choose which action
should be performed ( (I)gnore, (D)isplay, (E)rase or (S)how and erase ) : I

Welcome to Special Dedicated-Server Linux (x86_64) Version 5.5.1 - Kernel 4.4.77-9.1.x86_64 (ttyS0).

server login:
Welcome to Special Dedicated-Server Linux (x86_64) Version 5.5.1 - Kernel 4.4.77-9.1.x86_64 (ttyS0).

server login:
Welcome to Special Dedicated-Server Linux (x86_64) Version 5.5.1 - Kernel 4.4.77-9.1.x86_64 (ttyS0).

server login: ~.

연결이 작동하는 것을 볼 수 있습니다.

그런데 질문이 있어요.

Enter를 3번 누른 후 연결을 종료하고 싶습니다.

이 작업을 정상적으로 수행하려면 "alt gr + .enter"를 누르면 연결이 닫힙니다.

server login: Connection to console closed.

그러나 위에서 볼 수 있듯이 예상대로 작동하지 않습니다.

어떤 생각이 있나요?

답변1

글쎄, 나는 읽는 것이 더 좋기 때문에 스스로 대답합니다.

테스트해봤는데... "expect eof"를 제거했더니 더 나아진 것 같았습니다.

cat <<< '#!/usr/bin/expect -f
spawn ssh -e none root:ttyS'"$port"'@'"$console"'

expect {
        "*regular*" { send "1\r"}
        "default" { send "i\r"}
        }

expect {
        "*gnore*" { send "i\r"}
        }

expect {
        "*\n*" {send "\r"}
        }
sleep 5
expect {
        "*\n*" {send "\r"}
        }
sleep 2
expect {
        "*\n*" {send "\r"}
}
sleep 2
' > $TMPEXPECT
$TMPEXPECT
echo ""
echo ""
echo "this is a test after the expect and expect eof part"

이 코드를 사용하면 다음과 같은 결과를 얻습니다.

spawn ssh -e none root:ttyS33@console

A non-empty Data Buffering File was found. Choose which action
should be performed ( (I)gnore, (D)isplay, (E)rase or (S)how and erase ) : I

Welcome to Special Dedicated-Server Linux (x86_64) Version 5.6.0 - Kernel 4.4.89-9.1.x86_64 (ttyS0).

server login:
Welcome to Special Dedicated-Server Linux (x86_64) Version 5.6.0 - Kernel 4.4.89-9.1.x86_64 (ttyS0).

server login:

this is a test after the expect and expect eof part

연결이 올바르게 종료된 것 같습니다. 그렇게 생각해요. 정상적인 연결을 테스트해봤습니다. 다음 메시지가 표시되지 않습니다.

*
* * * ttyS33 is being used by (root) !!!
*

1 - Initiate a regular session
2 - Initiate a sniff session
3 - Send messages to another user
4 - Kill session(s)
5 - Quit

Enter your option :

연결이 제대로 닫히지 않으면 이런 현상이 발생합니다.

그래서 사건은 종결된 것 같아요. 당신의 도움을 주셔서 감사합니다

답변2

exit\reof에서 스크립트를 종료하는 대신 ssh 연결을 닫으려면 보내야 합니다 .

관련 정보