1

リモート telnet 要求に次のシェル コードを使用します。

{
sleep 5
echo admin
sleep 3
echo pass
sleep 3
echo ls
sleep 5
echo exit
} | telnet 172.16.1.1

Telnet接続が成功したかどうかを確認したい。$? を使用しようとしています:

echo $?

ただし、telnet 接続に問題がない場合でも、常に「1」が返されます。

4

2 に答える 2

3

Telnet をこのようにスクリプト化するのは非常に困難です。接続を確立し、意図したアクションを完了するまでにかかる時間には、高度な非同期性があります。 期待はまさにこの種の目的のために作成されました。telnet などのプログラムを起動し、一連の期待値を宣言します。たとえば、プログラムから 'username:' が発行されたときと、トリガーするアクション (例: ユーザー名を入力する) を宣言します。

多くの言語で期待されるライブラリまたはラッパーもあります。

以下は、telnet を駆動して HTTP HEAD リクエストを作成する例です。

set timeout 20

spawn telnet localhost 80

expect "Connected to "
send "HEAD / HTTP/1.0\r\n\r\n"

expect "HTTP 200 OK"

これらすべてを考えると、telnet は安全ではないと考えられていることを指摘しなければならないと思います。 Sshははるかに優れた選択肢であり、認証 (例: public/private key auth ) のより適切な選択、実行できるコマンドの制限(.ssh/authorized_keys 経由) をサポートしています。ssh と ssh-keys をセットアップすると、スクリプトは単一のシェル コマンドになります。

ssh user@hostname ls

ssh は、安全でセキュアなリモート コマンド実行を強力にサポートします。

于 2013-01-20T16:44:34.980 に答える
2

私の記憶が正しければ、この期待スクリプトは上記で行っていることを実行します。

#!/usr/bin/expect

spawn telnet 172.16.1.1

expect username:
send admin
expect password:
send pass
expect "\$ "
send ls
expect "\$ "
send exit

始めるための便利なリンクは次のとおりです: http://oreilly.com/catalog/expect/chapter/ch03.html

于 2013-01-20T16:52:59.663 に答える