linux透過shell指令碼實現ssh互動式自動化

大雄45發表於2022-08-07
導讀 expect是一個免費的程式設計工具語言,用來實現自動和互動式任務進行通訊,而無需人的干預(如:藉助Expect處理互動的 ,可以將互動過程:ssh登入,ftp登入等寫在一個 上,使之自動化完成。尤其適用於需要對多臺伺服器執行相同操作的環境中,可以大大提高系統管理人員的工作效率)

我們透過 可以實現簡單的控制流功能,如:迴圈、判斷等。但是對於需要互動的場合則必須透過人工來干預,有時候我們可能會需要實現和互動程式如telnet伺服器等進行互動的功能。而expect就使用來實現這種功能的工具。expect是一個免費的程式設計工具語言,用來實現自動和互動式任務進行通訊,而無需人的干預(如:藉助Expect處理互動的 ,可以將互動過程:ssh登入,ftp登入等寫在一個 上,使之自動化完成。尤其適用於需要對多臺伺服器執行相同操作的環境中,可以大大提高系統管理人員的工作效率)

首先需要有expect:

可以透過以下命令檢視是否安裝,如果未安裝直接 yum install expect,如果不行請自行百度安裝。

[root@localhost home]# whereis expect
expect: /usr/bin/expect /usr/share/man/man1/expect.1.gz
[root@localhost home]# expect
編寫指令碼如下:
#!/bin/bash
passwd="123456"
/usr/bin/expect <<-EOF
set timeout 50
spawn ssh  root@10.10.22.38
expect {
"*yes/*" { send "yes\r"; exp_continue }
"*password:" { send "$passwd\r" }
}
expect "*]*"
send "df -h\r"
EOF

解釋一下:

/usr/bin/expect <<-EOF  #開始用expcet執行標誌
EOF  #結束標誌
expect {} #是expect要實現互動的命令集
[root@localhost home]# ssh root@10.10.22.38
"*yes/*"
"*password:" { send "$passwd\r" } #如上如果遇到返回值 *代表無限字元,後面是password:則執行 send傳送字串 \r回車
expect "*]*"    #等待出現]執行下一條命令
send "df -h\r"  #執行命令並回車。
登入後複製 
#!/bin/bash
passwd="admin"
/usr/bin/expect <<-EOF set timeout 50 spawn telnet 0 expect { "Login*" { send "admin\r"} } expect { "*assword:" { send "$passwd\r" } } expect { "*admin>" {send "security enable protocol-detect\r"}
}
expect { 
"*admin>" {send "security set port-abnormal detect 2\r"}
}
expect { 
"*admin>" {send "security show protocol-detect status\r"}
}
expect { 
"*admin>" {send "security show port-abnormal-detect level\r"}
}
expect { 
"*admin>" {send "exit\r"}
}
EOF

原文來自:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2909342/,如需轉載,請註明出處,否則將追究法律責任。

相關文章