使用 expect 進行操作:
上面指令碼中的自動互動用到了expect,那麼什麼是expect呢?
expect是乙個基於tcl的用於自動互動操作的工具語言,它適合用來編寫需要互動的自動化指令碼,比如上面提到的ssh輸入使用者名稱密碼,自動ftp等等場景。
除了具有tcl的語法,expect提供了幾個常用的命令:
1. send
用來傳送乙個字串,比如 send "hello world"。
初始情況下,這個字串會傳送到標準輸出。如果你用的是max osx或者linux,可以在terminal下直接輸入expect命令並回車,就進入了expect互動環境,此時,輸入send "hello world"就可以看到結果。
一旦你的程式已經與其他程式進行互動,字串就會被傳送到其他程式那裡。如上面的例子指令碼中,我們呼叫send 」$password\r"就是把密碼傳送給ssh連線的伺服器端指定埠。
2. expect
與send相反,expect用來等待你所期望的字串。比如expect "hello"
在expect後面跟的字串中,你可以指定乙個正規表示式。
expect會一直等待下去,除非收到的字串與預期的格式匹配,或者到了超期時間。
3. spawn
spawn用來啟動乙個新的程序,比如上面的spawn ssh -d $port $user@$host,expect會執行命令「ssh -d $port $user@$host」。
在互動式的場景中,當你輸入命令後,可能伺服器端會返回一些操作提示符,以讓你輸入命令。expect提供了這樣三個常用的命令,spawn, expect和send,恰好滿足這種需要。把它們結合起來使用,可以實現很多簡單的自動化指令碼。
其它常用的命令還有:interact,比如你通過指令碼自動連線到了某個ftp,並輸入了使用者名稱密碼,此時需要人工輸入一些命令,就可以使用interact命令,它會把指令碼的控制權交給使用者;sleep,等待多少秒等等。
由於expect是從tcl繼承下來的,所以也支援tcl的語法和命令,比如變數宣告、流程控制等等。
上面指令碼的一些解釋:
1. set timeout 300:設定超時時間300s。如果設為-1,代表永不超時。
2. expect eof:等待接受檔案結束符。
Linux下使用SSH進行遠端登入
1.介紹 首先ssh是什麼?ssh secure shell 是linux unix mac及其他網路裝置最常用的遠端cli管理協議,ssh使用秘鑰對資料進行加密,保證了遠端管理資料的安全性。ssh2是現在廣泛使用的ssh版本 ssh協議使用tcp協議,埠號為22 openssh是ssh的乙個開源程...
使用指令碼進行ssh登入伺服器(Linux新手之路)
前面的部落格完成了乙個簡單的定時刪除日誌的指令碼,但由於現在又多台伺服器,需要在多台伺服器上執行刪除日誌操作的指令碼,有很多辦法,我想到的方法,乙個是,可以將指令碼部署到這些伺服器上,然後在每台伺服器上使用crontab來定時執行,但是如果伺服器太多的話,就比較繁瑣 還有乙個辦法就是通過指令碼去登入...
Linux下shell指令碼實現管理ssh鏈結
sudo apt install expect該檔案用來儲存使用者的ssh鏈結資訊 新建檔案password.lst,然後新增如下內容 序號 ip 埠 使用者 密碼 說明 1 123.56.10.38 22 username password 阿里雲測試伺服器 2 192.168.88.130 22...