expect是乙個自動化互動套件,主要應用於執行命令和程式時,系統以互動形式要求輸入指定字串,實現互動通訊。
expect自動互動流程:
spawn啟動指定程序—expect獲取指定關鍵字—send向指定程式傳送指定字元—執行完成退出.
注意該指令碼能夠執行的前提是安裝了expect
yum install -y expect
expect常用命令總結:
spawn 互動程式開始後面跟命令或者指定程式
expect 獲取匹配資訊匹配成功則執行expect後面的程式動作
send exp_send 用於傳送指定的字串資訊
exp_continue 在expect中多次匹配就需要用到
send_user 用來列印輸出 相當於shell中的echo
exit 退出expect指令碼
eof expect執行結束 退出
set 定義變數
puts 輸出變數
set timeout 設定超時時間
示例:
1.ssh登入遠端主機執行命令,執行方法 expect 1.sh 或者 ./1.sh
# vim 1.sh
#!/usr/bin/expect
spawn ssh [email protected] df -th
expect "*password"
send "123456\n"
expect eof
ssh遠端登入主機執行命令,在shell指令碼中執行expect命令,執行方法sh 2.sh、bash 2.sh 或./2.sh都可以執行.
#!/bin/bash
passwd='123456'
/usr/bin/expect <<-eof
set time 30
spawn ssh [email protected] df -th
expect
"*password:"
}expect eof
eof
3.expect執行多條命令
#!/usr/bin/expect -f
set timeout 10
spawn sudo su - root
expect "*password*"
send "123456\r"
expect "#*"
send "ls\r"
expect "#*"
send "df -th\r"
send "exit\r"
expect eof
建立ssh key,將id_rsa和id_rsa.pub檔案分發到各台主機上面。
1.建立主機配置檔案
[root@localhost script]# cat host
192.168.1.10 root 123456
192.168.1.20 root 123456
192.168.1.30 root 123456
[root@localhost script]# ls
copykey.sh hosts
2.編寫copykey.sh指令碼,自動生成金鑰並分發key.
[root@localhost script]# vim copykey.sh
#!/bin/bash
# 判斷id_rsa金鑰檔案是否存在
if [ ! -f ~/.ssh/id_rsa ];then
ssh-keygen -t rsa -p "" -f ~/.ssh/id_rsa
else
echo "id_rsa has created ..."
fi#分發到各個節點,這裡分發到host檔案中的主機中.
while read line
douser=`echo $line | cut -d " " -f 2`
ip=`echo $line | cut -d " " -f 1`
passwd=`echo $line | cut -d " " -f 3`
expect #!/bin/bash
ip=$1
user=$2
password=$3
expect <
6.使用普通使用者登入遠端主機,並通過sudo到root許可權,通過for迴圈批量在遠端主機執行命令.
$ cat timeout_login.txt
10.0.1.8
10.0.1.34
10.0.1.88
10.0.1.76
10.0.1.2
10.0.1.3
#!/bin/bash
for i in `cat /home/admin/timeout_login.txt`
do /usr/bin/expect << eof
spawn /usr/bin/ssh -t -p 22022 admin@$i "sudo su -"
expect
}
expect
}expect
}expect "*]#"
send "df -th\r"
expect "*]#"
send "exit\r"
expect eof
eofdone
密碼過期需要批量修改密碼
#!/bin/bash
for i in `cat /root/soft/ip.txt`
do /usr/bin/expect << eof
spawn /usr/bin/ssh root@$i
expect
}expect
}expect
}expect "*]#"
send "echo huawei@123|passwd --stdin root\r"
expect "*]#"
send "exit\r"
expect eof
eofdone
Linux expect介紹和用法
expect時用與提供自動互動的工具。比如如果想要用ssh登陸伺服器,每次都輸入密碼你覺得麻煩,那你就可以使用expect來做自動互動,這樣的話就不用每次都輸入密碼了。先看例子 usr bin expect set timeout 20 設定超時時間 spawn ssh root 192.168.4...
Linux expect介紹和用法
expect工具主要用於在linux上免互動實行程式。yum install expect y expect常用選項 c 從命令列執行expect指令碼,預設expect是互動地執行的 expect常用命令 spawn 互動程式開始後面跟命令或者指定程式 expect 獲取匹配資訊匹配成功則執行ex...
C 基礎 Func和Action的介紹及其用法
func是一種委託,這是在3.5裡面新增的,2.0裡面我們使用委託是用delegate,func位於system.core命名空間下,使用委託可以提公升效率,例如在反射中使用就可以彌補反射所損失的效能。action和func的功能是一樣的,只是action沒有返型別,func 有引數,有返回型別 a...