1

どうかお元気で!

私は最近、数人のネットワーク エンジニアが使用するための小さなユーティリティをまとめ始めました。その機能は、回路情報を取得することです。これは解析され、適切な形式で出力されます。もちろん、これには、必要なボックスへの SSH 接続と、必要な出力を生成するためのコマンドの実行が含まれます。

これが私が現在持っているスクリプトです。正常に動作し、目的のコマンドを実行し、いくつかの空白を送信してシステムにさらに回路を表示するように促し、終了して終了します。これらはすべて、ボックスのホスト名と同じ名前のファイルに記録されています。偉大な。

ただし、生成されたファイルを読むと、実行したコマンドや接続時に提供された不要な統計など、大量のデータが含まれていることがわかります。コマンドを発行したときにログが開始され、その後ログが切断されることだけを探しています。私は期待に慣れていないので、ご指導いただければ幸いです。

PS。私がばかげたことをした場合は、お詫び申し上げます。私は言語自体にかなり慣れていないため、サポートはそれほど優れていません。

ありがとう。

set ip [lindex $argv 0]
set hostname [lindex $argv 1]
set timeout 10
set user ""
set password ""

# Spawning the ssh session
spawn ssh $ip -l $user

# Awaiting prompt for password
expect "$user@$ip's password:"
sleep 1;
# Awaiting prompt
send "$password\n"
sleep 2
log_file -noappend $hostname;
send "terminal length 0\n"
sleep 1
send "show int desc\n"
sleep 5
send "exit\n"
interact
exit
4

1 に答える 1

5

を任意の場所に配置することで、出力を制御できlog_fileます。

ロギングを開始する場合は、行を次のように追加できます(コードに既にあります)

log_file my_log_file.log

コンソールに出力されたものは、これらのコマンドの実行後に という名前のファイルに記録されますmy_log_file.log。デフォルトでは、ファイルがその場所にすでに存在する場合は追加されます。フラグを追加する-noappendと、既存のファイルが上書きされます。

log_file -noappend fresh.log

ロギングを停止したい場合は、引数なしで log_file を指定するだけです

log_file

この時点から、生成された出力は保存されません。

たとえば、いくつかのスイッチにログインし、いくつかの資格情報を与えていくつかのコマンドを実行すると、次のようになります。

spawn ssh some_ip
expect some_thing
#Login code here
log_file output.log; # Start logging
#some actions here
log_file; # stopping logging here.
# some more actions
# end

スペースを複数回送信しています。代わりに、次のように端末の長さを 0 に設定できます。

send "term len 0"
expect "prompt"

これにより、複数回送信するオーバーヘッドが回避されます。また、あなたの場合、期待することは何もないので、スペースは非常に速くスイッチに送信されます。'term len 0' なしでそれを行うことにまだ興味がある場合は、少なくとも次のようにコードをループに入れることができます。

for { set i 0 } { $i < 10 } { incr i } { 
  send " "
  expect "something"
}

ただし、10 を超えるスペースを送信する必要がある可能性があるため、この方法はお勧めできません。その場合、これは失敗します。

于 2014-11-05T10:38:19.767 に答える