나는 도움이 필요해.
나는 일상 업무를 위해 작은 테스트 스크립트를 작성했습니다.
이 스크립트에서는 서버 콘솔에 연결하겠습니다.
제가 기대하는 부분은 다음과 같습니다.
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\r
eof에서 스크립트를 종료하는 대신 ssh 연결을 닫으려면 보내야 합니다 .