1、linux expect命令,它類似於shell、window中的cmd。本身就是命令
2、如果沒有需要安裝
yum info expect
yum -y install expect
如果不行使用源碼安裝吧
3、man expect
案例1:
[root@hadoop01 ~]# expect -c 'expect "\n" {send "pressed enter\n"}' 交互式的,按回車鍵就會輸出pressed enter,並換行
案例2:
vi ./myexpect.sh
內容如下(實現自動登錄):
#!/usr/bin/expect
set timeout 30
spawn ssh -l root 192.168.216.112 root爲登錄用戶,spawn 代表運行命令;ssh -l代表登錄用戶
expect "password:" 等待出現password
send "root\r" root爲登錄密碼
interact 用戶停留在遠程服務器上
案例2的兩種執行方式:
expect ./myexpect.sh
授予腳本執行權限:
./myexpect.sh
案例3: 實現自動安裝jdk,使用nginx服務器作爲源
vi /root/auto.sh
內容如下:
#!/bin/bash
SERVERS="192.168.216.111 192.168.216.112" #這是我需要安裝軟件的兩臺機器的ip
PASSWORD=root #這是主機的密碼,建議各主機密碼設成一樣的
BASE_SERVER=192.168.216.111 #這是我主機的IP
auto_ssh_copy_id() {
expect -c "set timeout -1;
spawn ssh-copy-id $1;
expect {
*(yes/no)* {send yes\r;exp_continue;}
*password:* {send $2\r;exp_continue;}
eof {exit 0;}
}";
}
ssh_copy_id_to_all() {
for SERVER in $SERVERS
do
auto_ssh_copy_id $SERVER $PASSWORD
done
}
ssh_copy_id_to_all
for SERVER in $SERVERS
do
scp install.sh root@$SERVER:/root
ssh root@$SERVER /root/install.sh
done
vi /root/install.sh
內容如下:
#!/bin/bash
BASE_SERVER=192.168.216.111
wget $BASE_SERVER/soft/jdk-8u152-linux-x64.tar.gz
tar -zxvf jdk-8u152-linux-x64.tar.gz -C /usr/local
cat >> /etc/profile << EOF
export JAVA_HOME=/usr/local/jdk1.8.0_152/
export PATH=$PATH:$JAVA_HOME/bin:
EOF
執行測試
授予兩個文件可執行權限
chmod +x install.sh boot.sh
運行第一個腳本即可
./boot.sh
案例4、配置好hadoop,然後遠程scp發送到每一個節點:
代碼自己寫....