2012-03-16 8 views
0

私はこの質問を以前に聞いたことがありましたが、質問があいまいだったのでそのスレッドは閉じられました。だからここで2番目の試行があります:D。spawn/expect/sendコマンドを使用しないでTelnetを自動化

私は何をしたいですか?基本的に私はtelnetでリモートマシンに接続してコマンドZAHOを実行する簡単なスクリプトを作りたいと思っています。私のローカルマシン上のファイルcat.txtに出力を保存します。ここで私が試したコードは次のとおりです。私は、スクリプトを実行したときに

(echo "PPATIL"; sleep 1 ; echo "[email protected]" ; sleep 1;) |telnet 10.110.3.132 23<< EOF 

ZAHO; > cat.txt 

EOF 

次のことが起こります:

が10.110.3.132 ...

10.110.3.132に接続

をしようとしています。

エスケープ文字は「^]」私は何が起こっずに戻って私のシェルプロンプトに来るこの後

です。

私は間違ったパスワードを入力しても、私はまだ同じエラーが発生します。

PS:spawn/expect/sendは存在せず、ログインするためのオプションはtelnetによるものです。

私はまた、しかし、リモートマシンが接続されます。この場合、この

(echo "PPATIL"; sleep 1 ; echo "[email protected]" ; sleep 1;echo "ZAHO;";) |telnet 10.110.3.132 23 

を試みたが、それはユーザ名プロンプトを私に示して、ユーザ名を入力し、パスワードプロンプトを表示し、パスワードを入力し、第二のために眠ります「ZAHO;」を追加しますパスワードに接続し、切断されます。

エコー "ZAHO;"を削除すると、そしてまた、それは、一般的には、ユーザー名とパスワード

+0

私はログインできました。私が行った変更は、パスワードの後ろに\ rを付けることでした。しかし残っているのはコマンド "ZAHO;"を書くことだけです。それでもまだ起こっていない –

+0

ZAHOコマンドの後に\ rを追加してみてください。 –

+0

はい@マルク:D ..ありがとう、たくさん...私はそれを分かっていた..また、私は10秒の遅れを入れなければなりませんでした。明らかに長いコマンド –

答えて

0

を入力した後に切断されます:

cmd | cmd2 << EOF 
EOF 

が病気に定義されます。 (私は、シェル文法がこれを未定義、または実装定義、または何かを明確にしているかどうかはわかりませんが、確かにあなたが望むことはしません)。cmd2は1つの入力ソースしか持つことができませんが、パイプとヘレドックの両方から入力します。あなたは1つを選ぶ必要があります。

{ cmd1; cat << EOF; } | cmd2 
input 
EOF 

をそれはかなり難読化され、あなたは所望の入力を生成するスクリプトを書いたほうが良いでしょう。おそらく、あなたは試すことができます。

0

シェルスクリプトに限定されていない場合は、 Pythonは、その標準ライブラリに telnet interfaceを有する。実際にはライブラリのドキュメントページに示されている例は、あなたが望むものに非常に近いものです。

Pythonはおそらくシェルほど普及していませんが、広く展開され、使用されています。

+0

はい。私は悲しいことにUNIXを持っています。答える時間を取るために:D –

関連する問題