私はbashスクリプトを使用してTelnetサーバーにログインし、多くのコマンドを実行しています。次のようになります。
ログインして.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:
Telnetログイン後にバナーを受け取りましたが、そのまま残ります(文字列が一致しないかのように)。正確な応答の代わりにワイルドカードを使用する方が安全ですか(そして「ユーザー名:」のみが一致)。
答え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」を返してキャリッジリターンを「押します」。
編集する:
これよりエレガントな答えです。