1. 程式人生 > >分發系統介紹,expect腳本遠程登錄,expect腳本遠程執行命令,expect腳本傳遞參數

分發系統介紹,expect腳本遠程登錄,expect腳本遠程執行命令,expect腳本傳遞參數

expect

分發系統介紹
當我們要上線一個新代碼的時候,如果機器少,我們的工作量不會很大,很容易完成,如果設備很多,有幾十臺,上百臺的話,那我們的工作量會非常大,而且也不規範,這時,我們就可以用可以用開源的軟件,expect腳本語言,進行實現分發系統的功能。

expect腳本遠程登錄
首先yum安裝expect
yum install -y expect

然後寫一個expect的遠程登錄腳本
#! /usr/bin/expect
set host "192.168.133.132" 這是expect的變量,它和shell不同的是變量前面要加set
set passwd "123456" 這是expect的變量,它和shell不同的是變量前面要加set

spawn ssh root@$host 登錄機器的語句
expect {
"yes/no" { send "yes\r"; exp_continue} 第一次登錄會提示yes或者是no,send是發送。\r是回車。exp_continue表示繼續。
"assword:" { send "$passwd\r" }
}
interact 需要停留在遠程的機器上,不需要退出。

然後給他增加權限
[root@linletao-001 ~]# chmod a+x 1.expect

執行腳本
[root@linletao-001 ~]# ./1.expect
spawn ssh [email protected]
The authenticity of host ‘192.168.218.129 (192.168.218.129)‘ can‘t be established.
ECDSA key fingerprint is SHA256:qNyAkC/T6wTJaqi1O2Ay20Y28uD8VsmNY3lgf4eTf60.
ECDSA key fingerprint is MD5:28:3a:76:a8:6e:db:04:ed:85:ff:fb:fe:25:33:b0:37.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.218.129‘ (ECDSA) to the list of known hosts.
[email protected]‘s password:
Last login: Tue Jun 5 22:29:13 2018 from 192.168.218.1
[root@localhost ~]#
主機名已更改,登陸成功。

expect腳本遠程執行命令

#!/usr/bin/expect
set user "root"
set passwd "19860127"
spawn ssh [email protected]
expect {
"yes/no" { send "yes\r"; exp_continue}
"password:" { send "$passwd\r" }
}
expect "]" 當我們遇到】時,
send "touch /tmp/12.txt\r" 在tmp目錄下創建文件12.txt,然後回車
expect "]
"
send "echo 1212 > /tmp/12.txt\r" 打印1212到我們剛創建的/tmp/12.txt
expect "]*"
send "exit\r" 退出
添加權限
[root@linletao-001 ~]# chmod a+x 2.expect
執行腳本
[root@linletao-001 ~]# ./2.expect
spawn ssh [email protected]
[email protected]‘s password:
Last login: Tue Jun 5 22:40:40 2018 from 192.168.218.130
[root@localhost ~]# touch /tmp/12.txt
[root@localhost ~]# echo 1212 > /tmp/12.txt
[root@localhost ~]# [root@linletao-001 ~]#

expect腳本傳遞參數

#!/usr/bin/expect
set user [lindex $argv 0] lindex $argv 第一個參數,這個命令是將值賦予user中
set host [lindex $argv 1]
set passwd "登錄機器的密碼"
set cm [lindex $argv 2]
spawn ssh $user@$host expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "]"
send "$cm\r"
expect "]
"
send "exit\r"

分發系統介紹,expect腳本遠程登錄,expect腳本遠程執行命令,expect腳本傳遞參數