我們通過Shell可以實現簡單的控制流功能,如:循環、判斷等。但是對于需要交互的場合則必須通過人工來幹預,有時候我們可能會需要實現和交互程序如telnet服務器等進行交互的功能。而expect就使用來實現這種功能的工具。
expect是一個免費的編程工具語言,用來實現自動和交互式任務進行通信,而無需人的幹預。expect是不斷發展的,随着時間的流逝,其功能越來越強大,已經成為系統管理員的的一個強大助手。expect需要Tcl編程語言的支持,要在系統上運行expect必須首先安裝Tcl。
下面介紹一個通過expect來自動ssh連接的腳本,大家可以思考下裡面實現的邏輯。
在使用expect時,基本上都是和以下四個命令打交道:
執行:/mnt/auto_connect.exp IP password 時 密碼正确,則通過 ssh 連接到該 IP 主機,并保持登陸。
# vim auto_connect.sh #!/bin/bash /usr/bin/expect << EOF //切換到expect環境 spawn ssh root@$1 //ssh連接IP expect { "yes/no" { send "yes\r";exp_continue } //确認連接 "password" { send "$2\r" } //輸入密碼 } Interact //保留 EOF //退出
# chmod x auto_connect.sh //添加可執行權限 # sh auto_connect.sh 172.25.254.226 redhat //添加IP和密碼 spawn ssh [email protected] The authenticity of host '172.25.254.226 (172.25.254.226)' can't be established. ECDSA key fingerprint is eb:24:0e:07:96:26:b1:04:c2:37:0c:78:2d:bc:b0:08. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.25.254.226' (ECDSA) to the list of known hosts.
如果大家能夠在工作中熟練的使用shell腳本就可以很大程度的提高工作效率,再搭配上expect,那麼很多工作都可以自動化進行,對工作的展開如虎添翼。如果你會Python的話,你的視野将會更加開闊,那個時候你又會“嫌棄”expect了。
後面小編會分享更多Linux方面内容,感興趣的朋友走一波關注哩~
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!