七十3、分發系統介紹、expect腳本遠程登陸、expect腳本遠程執行命令、expect傳遞參數

七十3、分發系統介紹、expect腳本遠程登陸shell

1、分發系統介紹vim

expect腳本:能傳輸文件,能夠遠程執行命令,不須要輸入密碼,上線代碼ssh

首先,準備一臺模板機器,這臺機器上的代碼是最新的代碼,準備要上線的代碼,要知道要線上機器的ip地址,還有對應用戶和密碼。ide


2、expect腳本遠程登陸spa

#  yum install -y expectip

 自動遠程登陸ci

[root@MRX sbin]# vim 1.expect       路徑:/usr/local/sbin/it

#! /usr/bin/expectio

set host "192.168.93.131"ast

set passwd "1346"         #這兩個是定義變量,在expect中要加一個set。

spawn ssh root@$host       #expect命令有用到spawn,spawn後跟的就是系統的shell命令

expect {

"yes/no" { send "yes\r"; exp_continue}   #初次登陸時,發送yes,\r表示回車,exp_continue表示繼續。

"password:" { send "$passwd\r" }   #這句和上面的一句,是截取系統內的提示,和系統交互:當系統輸出yes/no時咱們怎麼作,當輸出password時咱們怎麼作。

}

interact   #表示須要停留在遠程的機器上,不須要退出來。不加它會直接退出來。若是加上expect eof,會在遠程機器上停留一兩秒鐘而後退出來。


以前的make password安裝的包其實就是expect包。

/root/.ssh/known_hosts   登陸時,一個陌生機器登陸會提示是否創建鏈接,點擊確認保存後,信息會保存在這個文件內,清空這個文件的內容,再次登陸就會再次出現是否創建鏈接的提示。

[root@MRX sbin]# chmod a+x ./1.expect

[root@MRX sbin]# ./1.expect                 //執行這個腳本

spawn ssh root@192.168.93.131

The authenticity of host '192.168.93.131 (192.168.93.131)' can't be established.

ECDSA key fingerprint is SHA256:Z7xp3qHrdUE3yl4C34LCIrYyaCTvwC/hhZsWu1iZfS4.

ECDSA key fingerprint is MD5:ff:06:a8:bd:b0:d9:2f:72:df:64:07:b2:b0:36:c4:06.

Are you sure you want to continue connecting (yes/no)? yes   自動回覆了

Warning: Permanently added '192.168.93.131' (ECDSA) to the list of known hosts.

root@192.168.93.131's password:     輸入密碼

Permission denied, please try again.

root@192.168.93.131's password:

Last failed login: Sat Jul 28 22:35:09 CST 2018 from 192.168.93.130 on ssh:notty

There was 1 failed login attempt since the last successful login.

Last login: Sat Jul 28 22:08:46 2018 from 192.168.93.1

[root@CLAY ~]#         //從主機名能夠看出已經登陸到另一臺機器上了

執行exit或者ctrl+d能夠退出來。


3、expect腳本遠程執行命令

 自動遠程登陸後,執行命令並退出

[root@MRX sbin]# vim 2.expect      路徑:/usr/local/sbin/

#!/usr/bin/expect

set user "root"

set passwd "1346"

spawn ssh $user@192.168.93.129


expect {

"yes/no" { send "yes\r"; exp_continue}

"password:" { send "$passwd\r" }

}           #前面的內容和1.expect保持一致

expect "]*"       #這裏的]*是登陸到新機器後所在路徑的右邊[root@CLAY ~]#,root用戶後面是#,普通用戶是$,因此用通配,無論是什麼都執行下面的命令。

send "touch /tmp/12.txt\r"     #touch 12.txt而後回車\r

expect "]*"

send "echo 1212 > /tmp/12.txt\r"     #同理

expect "]*"

send "exit\r"    #而後退出

[root@MRX sbin]# chmod a+x 2.expect       //加x權限,不加就執行不了


4、expect腳本傳遞參數

傳遞參數

[root@MRX sbin]# vim 3.expect     路徑:/usr/local/sbin/

#!/usr/bin/expect


set user [lindex $argv 0]      #argv 0是第一個參數,把第一個參數的值賦給user

set host [lindex $argv 1]      #argv 1是第二個參數,把第二個參數的值賦給host

set passwd "1346"

set cm [lindex $argv 2]      #argv 2是第三個參數

spawn ssh $user@$host


expect {

"yes/no" { send "yes\r"}

"password:" { send "$passwd\r" }

}

expect "]*"

send "$cm\r"

set timeout -1  #好比要執行一個vmstat,若是想設置超時時間,就加這一行,永不超時就是-1,也能夠指定秒數

expect "]*"

send "exit\r"

[root@MRX sbin]# chmod a+x 3.expect.

[root@MRX sbin]# ./3.expect root 192.168.93.129 ls

[root@MRX sbin]# ./3.expect root 192.168.93.129 "ls;w;vmstat 1"

能夠執行一個或多個命令,若是想把多個命令做爲一個參數傳遞進去,就要用雙引號。

相關文章
相關標籤/搜索