使用下面的shell代碼遠程Telnet請求:如何從shell腳本獲取telnet執行結果代碼?
{
sleep 5
echo admin
sleep 3
echo pass
sleep 3
echo ls
sleep 5
echo exit
} | telnet 172.16.1.1
我要檢查,如果Telnet連接成功與否。試圖使用$?:
echo $?
但它總是返回「1」,即使telnet連接正常。
使用下面的shell代碼遠程Telnet請求:如何從shell腳本獲取telnet執行結果代碼?
{
sleep 5
echo admin
sleep 3
echo pass
sleep 3
echo ls
sleep 5
echo exit
} | telnet 172.16.1.1
我要檢查,如果Telnet連接成功與否。試圖使用$?:
echo $?
但它總是返回「1」,即使telnet連接正常。
以這種方式編寫Telnet特別困難,與建立連接和完成預期操作所花費的時間存在高度的異步性。 expect就是爲這種目的而創建的。你啓動一個程序,比如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是一個更好的選擇,並支持可以運行(通過.ssh/authorized_keys)更好的身份驗證選項(例如:public/private key auth),restrictions for commands。使用ssh,並設置SSH密鑰,你的腳本減少到一個shell命令:
ssh [email protected] ls
SSH有安全,安全遠程命令執行的大力支持。
如果我正確記得,這個期望腳本會做你在做什麼。
#!/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
使用'期待(1)'腳本互動節目。 –
我第二個這個。 Expect對於自動執行交互式任務非常有用。 –