用了整整一週MacBook Pro了,一個字 好用,真香。
前幾天把,參考《iTerm2 + Oh My Zsh 打造舒適終端體驗》把iTerm2裝完了,今天想找個服務器開始敲命令了。
檢查版本
檢查是否安裝好(顯示安裝好的版本號就是已經安裝好了)
➜ bin expect -v
expect version 5.45
填寫iTerm2的配置文件
首先找到 iTerm2,然後選擇 Preferences,點擊+ 添加新的General配置,配置基礎Name,如有需要可以添加一個新的Tags,然後在Commond中,找一個可以 expect的文件夾下的任意一個文件,隨便任意指定。
在指定文件夾下面創建新建的配置文件
- 新建文件夾
cd ~
mkdir .ssh/akina
- 新建配置文件
touch yunqi
- 配置文件中添加一下內容
#!/usr/bin/expect -d
set host 192.168.100.119(服務器ip地址)
set user root(登錄服務器的用戶名)
set password admin(登錄服務器的密碼)
spawn ssh $user@$host
expect "*password:*"
send "$password\r"
interact
簡單在這記錄下下面會用到的一些命令
set timeout #設置超時時間,默認超時時間10s.
spawn shell command # spawn後面接的是我們要執行的shell命令
expect "hi" #匹配輸出內容“hi”
{send “hello\r”} # 匹配到內容''hi"後輸出“hello”,“\r”是代表是返回字符。
interact #執行完成後保持交互狀態,把控制權交給控制檯,這個時候就可以手工操作了。如果沒有這一句登錄完成後會退出,而不是留在遠程終端上。如果你只是登錄過去執行一段命令就退出,可改爲[expect eof]
此時已經配好了,可以自動連接
第一種方式
能看到新的配置,就說明配置完畢,直接點擊就可以自動連接了。
第二種方式
終端界面,直接右鍵,New Tab 選中即可~
第三種方式
快捷鍵操作,command+o ,選擇你設定的Profile即可。
其他expect腳本示例
簡單更改密碼腳本
[root@localhost shell]# cat password.exp
#!/usr/bin/expect -d #"#!/usr/bin/expect"這一行告訴操作系統腳本里的代碼使用那一個shell來執行。 -d 啓用調試模式(可加可不加)。
set timeout 30 #設置超時時間爲30s
spawn passwd user5 #spawn是進入expect環境後纔可以執行的expect內部命令,如果沒有裝expect或者直接在默認的SHELL下執行是找不到spawn命令的。所以不要用 “which spawn“之類的命令去找spawn命令。好比windows裏的dir就是一個內部命令,這個命令由shell自帶,你無法找到一個dir.com 或 dir.exe 的可執行文件。它主要的功能是給ssh運行進程加個殼,用來傳遞交互指令。
expect "New password:" {send "123456\r" } #這個命令的意思是判斷上次輸出結果裏是否包含“New password:”的字符串,如果有則立即返回"123456","\r"代表是返回字符,否則就等待一段時間後返回,這裏等待時長就是前面設置的30秒 。
expect "new password:" {send "123456\r"} #在平常我們設置密碼的時候會讓我輸入一次後再輸入一次進行確認,這個是匹配第二次輸出,然後再次輸入密碼。
expect eof #表示讀取到文件結束符
登陸遠程服務器並停留在遠程服務器上
[root@localhost shell]# cat login.exp
#!/usr/bin/expect
spawn ssh 192.168.123.218 #ssh 遠程登陸
expect {
"*yes/no" {send "yes\r";exp_continue} #匹配輸出內容,返回內容,exp_continue表示繼續執行下一步
"*password" {send "123456\r"}
}
interact #執行完成後保持交互狀態,把控制權交給控制檯,這個時候就可以手工操作了。如果沒有這一句登錄完成後會退出,而不是留在遠程終端上。如果你只是登錄過去執行一段命令就退出,可改爲[expect eof]
傳輸參數執行登陸
[root@localhost shell]# cat login2.exp
#!/usr/bin/expect
set ip [lindex $argv 0] #這條命令是將變量ip的值設置爲傳入進來的第一個參數。[lindex $argv 0]表示的就是第一個參數的值
set port [lindex $argv 1] #這條命令是將變量port的值設置爲傳入進來的第二個參數。[lindex $argv 1]表示的就是第二個參數的值
set passwd "123456"
spawn ssh $ip -p$port #使用變量,這裏使用的方法跟shell腳本一樣
expect {
"yes/no" {send "yes\r";exp_continue}
"password:" {send "$passwd\r"}
}
interact
[root@localhost shell]# ./login2.exp 192.168.123.218 22 #多個參數直接以空格間隔,第一個參數:192.168.123.218 第二個參數22
You can't get something for nothing.