2011-05-08 30 views
3

我正在使用Telnet向Mikrotik路由器發送命令。帶有期望的Telnet自動化:認證緩慢?

telnet 192.168.100.100 -l admin 
Password: pass1234 
[[email protected]] > /interface pppoe-server remove [find user=aspeed13] 
[[email protected]] > quit 

它工作正常。

現在我想用期望TCL腳本來自動執行它:

#!/usr/bin/expect -- 
spawn telnet 192.168.100.100 
expect "Login:" 
send "admin\r" 
expect "Password:" 
send "pass1234\r" 
expect "\[[email protected]\] >" 
send "/interface pppoe-server remove \[find user=aspeed13\]\r" 
expect "\[[email protected]\] >" 
send "quit\r" 

它的工作原理,但認證(第6行:send "pass1234\r")後,當路由器CLI加載它同時具有下列特徵^[[?6c^[[24;3R凍結了〜10秒 然後腳本運行正常。

我的問題是爲什麼手動訪問時Telnet快速加載,並且通過期望腳本訪問需要太多時間?我在論壇上看到有關telnet自動化的說法,他們說telnet速度很慢,但是由於手動速度太快,爲什麼需要時間加載預期?

+1

'expect'是'tcl',而不是'bash' – ninjalj 2011-05-08 13:24:23

+0

如果用'expect -re>>「'替換下一個'expect'行,它會起作用嗎? – ninjalj 2011-05-08 13:27:28

+0

感謝ninjalj的更正。 – 2011-05-08 14:58:26

回答

1

您是否嘗試使用netcat並啓用telnet模擬?

+0

您認爲netcat可以比預期更有用嗎?我會讀abt它,但如果你可以給我一個小樣本,我會很感激 – 2011-05-08 15:03:31

2

你看到的是從終端談判中回擊,這是因爲你沒有在真實終端中運行。 (嚴格來說,你是 - 這是希望的魔力 - 但它不是表現爲一個正常的終端一樣。)

最簡單的解決方法是設置終端別的東西產卵telnet會議之前,例如:

#!/usr/bin/expect -- 
set env(TERM) dumb 
spawn telnet 192.168.100.100 
# Rest of your script goes here ... 

或者,您可以嘗試正確響應請求以輸入VT102模式和光標位置的報告(感覺像很多工作),或者您可以重寫代碼,以便它執行interact(它連接另一個以你正在運行的真實終端結束)。但是如果設置一個環境變量來修復它,爲什麼要去那些額外的麻煩?

(注:我建議終端設置爲dumb這裏,但關鍵是你要的作品啞終端是理想的,因爲他們只是完全愚蠢的,因此很容易假裝愚蠢的終端。是他們......)

+1

我試過'設置環境(TERM)愚蠢'沒有成功,仍然連接延遲是一樣的:( – 2011-05-11 12:07:54

+0

你認爲使用SSH可以比telnet還要快,或者它也是一樣的,比如說可以: 使用telnet(或者ssh?)在不到3秒的時間內打開/發送命令/關閉 – 2011-05-11 12:14:24

+2

@Naim:我想這應該是關於我的經驗也一樣,沒有理由不安全(我喜歡能夠使用cryptokeys進行身份驗證,這實際上使我的練習更快)。 – 2011-05-11 14:38:56

1

有點晚回答。
但是如果你想加快你的角色輸入與期望。
嘗試使用「autoexpect」命令生成腳本,該命令會將
交互保存在名爲「script.exp」的文件中,該文件位於您運行命令的相同目錄中。

例如:
CD $ HOME
autoexpect的telnet 192.168.100.100
#更多的telnet命令,這裏
出口

以上所有的命令將被保存在〜/ script.exp
關於Tcl,我不知道這個腳本是否可以通過tcl運行。

1

我的答案可能太晚了。這是「Telnet autoconfig命令」...我是這個問題,並在Mikrotik Wiki中找到這個解決方案:

在登錄名後添加+ t。此開關自動檢測到關閉。

例: 發送 「管理+ T \ R」

它的偉大工程,而不是 「等待CCA 10秒」 登陸後的預期。

有鏈接的MikroTik維基幫助更多的「開關」: http://wiki.mikrotik.com/wiki/Manual:Console_login_process#FAQ

P.S:對不起,我的英語水平。