macos自動連接跳板機

我們採用的是expect

然後編寫腳本的方式去自動登錄跳板機。

1.首先安裝 expect

brew install expect

expect是一個免費的編程工具,用來實現自動的交互式任務,而無需人爲干預。說白了,expect就是一套用來實現自動交互功能的軟件。

在實際工作中,我們運行命令、腳本或程序時,這些命令、腳本或程序都需要從終端輸入某些繼續運行的指令,而這些輸入都需要人爲的手工進行。而利用expect,則可以根據程序的提示,模擬標準輸入提供給程序,從而實現自動化交互執行。這就是expect!!!

send 用於向進程發送字符串
expect 從進程接收字符串
spawn 啓動新的進程
interact 允許用戶交互

send命令接收一個字符串參數,並將該參數發送到進程。
expect命令和send命令相反,expect通常用來等待一個進程的反饋,我們根據進程的反饋,再發送對應的交互命令。
spawn命令用來啓動新的進程,spawn後的send和expect命令都是和使用spawn打開的進程進行交互。
interact命令用的其實不是很多,一般情況下使用spawn、send和expect命令就可以很好的完成我們的任務;但在一些特殊場合下還是需要使用interact命令的,interact命令主要用於退出自動化,進入人工交互。比如我們使用spawn、send和expect命令完成了ftp登陸主機,執行下載文件任務,但是我們希望在文件下載結束以後,仍然可以停留在ftp命令行狀態,以便手動的執行後續命令,此時使用interact命令就可以很好的完成這個任務。 

2.編輯shell腳本

autologin.sh

#!/usr/bin/expect

set timeout -1

set password 登錄密碼

spawn sudo ssh 用戶名@ip地址

expect "*password:*"   

send "$password\r"   

interact

第一行的expect路徑可以使用which expect命令查看

#!/usr/tcl/bin/expect:
使用expect來解釋該腳本;

set timeout 30:
設置超時時間,單位爲秒,默認情況下是10秒;

set host "101.200.241.109":
設置變量;

spawn ssh \$username@\$host:spawn
是進入expect環境後纔可以執行的expect內部命令,如果沒有裝expect或者直接在默認的SHELL下執行是找不到spawn命令的。它主要的功能是給ssh運行進程加個殼,用來傳遞交互指令;

expect "*password*":
這裏的expect也是expect的一個內部命令,這個命令的意思是判斷上次輸出結果裏是否包含“password”的字符串,如果有則立即返回;否則就等待一段時間後返回,這裏等待時長就是前面設置的30秒;

send "\$password\r":
當匹配到對應的輸出結果時,就發送密碼到打開的ssh進程,執行交互動作;

interact:
執行完成後保持交互狀態,把控制權交給控制檯,這個時候就可以手工操作了。如果沒有這一句登錄完成後會退出,而不是留在遠程終端上。

這就是對上述這段簡單簡單腳本的分析,在上述的示例中,涉及到expect中一個非常重要的概念——模式-動作;即上述expect "*password*" {send "$password\r"}這句代碼表達出來的含義。

 

3.將shell放到任意目錄,並做軟連 到 /usr/bin 目錄

如:ln -s 目錄/autologin.sh /usr/bin/autologin

然後執行對應的命令:autologin,就可以實現自動登錄啦。

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章