linux下expect環境安裝以及簡單指令碼測試
linux下expect環境安裝以及簡單指令碼測試
https://www.cnblogs.com/kevingrace/p/5900303.html
linux expect詳解(ssh自動登入)
https://www.cnblogs.com/dion-90/articles/8570601.html
expect是互動性很強的指令碼語言,可以幫助運維人員實現批次管理成千上百臺伺服器操作,是一款很實用的批次部署工具!
expect依賴於tcl,而linux系統裡一般不自帶安裝tcl,所以需要手動安裝
下載:expect-5.43.0.tar和tcl8.4.11-src.tar
下載地址:
提取密碼:af9p
將expect和tcl的軟體包下載放到root使用者下的/tmp目錄下
一、安裝expect和tcl
(1)、解壓tcl,進入tcl解壓目錄,然後進入unix目錄進行編譯安裝
[root@slient tmp]# tar -xzvf tcl8.4.11-src.tar.gz
..................................
[root@slient tmp]# cd tcl8.4.11/unix/
[root@slient unix]# ./configure
..................................
[root@slient unix]# make && make install
..................................
(2)、安裝expect
[root@slient tmp]# tar -xzvf expect-5.43.0.tar.gz
..................................
[root@slient tmp]# cd expect-5.43
[root@slient expect-5.43]# ./configure --with-tclinclude=/tmp/tcl8.4.11/generic --with-tclconfig=/usr/local/lib/
..................................
[root@slient expect-5.43]# make && make install
..................................
(3)、安裝完成後進行測試
[root@slient expect-5.43]# expect
expect1.1>
expect1.1>
二、 下面結合shell指令碼做簡單測試
示例: 從本機自動登入到遠端機器192.168.56.12(埠是22,密碼是:oracle)
登入到遠端機器後做以下幾個操作:
1)useradd wangshibo
2)mkdir /opt/test
3) exit自動退出
[root@slient ~]# cat test-ssh.sh
#!/bin/bash
passwd='oracle'
/usr/local/bin/expect <<-EOF
set time 30
spawn ssh -p22 root@192.168.56.12
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "$passwd\r" }
}
expect "*#"
send "useradd wangshibo\r"
expect "*#"
send "mkdir /opt/test\r"
expect "*#"
send "exit\r"
interact
expect eof
EOF
[root@slient ~]#
--執行:
[root@slient ~]# sh test-ssh.sh
spawn ssh -p22 root@192.168.56.12
The authenticity of host '192.168.56.12 (192.168.56.12)' can't be established.
RSA key fingerprint is 16:8d:5a:fb:f2:58:e1:ee:4c:98:3d:76:ec:48:bb:46.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.56.12' (RSA) to the list of known hosts.
root@192.168.56.12's password:
Last login: Tue Jan 30 15:58:08 2018 from 192.168.56.1
[root@one ~]# useradd wangshibo
[root@one ~]# mkdir /opt/test
[root@one ~]#
[root@slient ~]#
[root@slient ~]#
上面的例子如果只是自動登陸,登陸機器後不做操作的指令碼內容如下:
shell指令碼的寫法:
[root@slient ~]# cat test.sh
#!/bin/bash
passwd='oracle'
/usr/local/bin/expect <<-EOF
set time 30
spawn ssh -p22 root@192.168.56.12
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "$passwd\r" }
}
expect eof
EOF
[root@slient ~]#
--執行:
[root@slient ~]# sh test.sh
spawn ssh -p22 root@192.168.56.12
root@192.168.56.12's password:
Last login: Tue Jan 30 16:03:23 2018 from 192.168.56.20
[root@one ~]#
expect指令碼的寫法:
[root@slient ~]# cat test
#!/usr/local/bin/expect
set timeout 30
spawn ssh -p22 root@192.168.56.12
expect "*password:"
send "oracle\r"
interact
[root@slient ~]#
--執行:
[root@slient ~]# ./test
spawn ssh -p22 root@192.168.56.12
root@192.168.56.12's password:
Last login: Tue Jan 30 16:07:23 2018 from 192.168.56.20
[root@one ~]#
注意: spawn後面跟的是操作動作,比如登陸機器後執行uptime,即:spawn ssh -p22 root@192.168.1.201 "uptime"
三、示例使用expetc自動化傳送檔案到遠端主機目錄上
[oracle@slient ~]$ cat sftp.sh
#!/usr/local/bin/expect
expect<<!
spawn sftp oracle@192.168.56.12
expect "password:"
send "oracle\n";
expect "sftp>"
send "lcd /home/oracle/dmp\n";
expect "sftp>"
send "cd /home/oracle/soft\n";
expect "sftp>"
send "put tb_pt.dmp\n";
expect "sftp>"
send "exit\n"
interact
!
[oracle@slient ~]$
[oracle@slient ~]$ chmod +x sftp.sh
--執行:
[oracle@slient ~]$ sh sftp.sh
spawn sftp oracle@192.168.56.12
Connecting to 192.168.56.12...
oracle@192.168.56.12's password:
sftp> lcd /home/oracle/dmp
sftp> cd /home/oracle/soft
sftp> put tb_pt.dmp
Uploading tb_pt.dmp to /home/oracle/soft/tb_pt.dmp
tb_pt.dmp 100% 216KB 216.0KB/s 00:00
sftp> [oracle@slient ~]$
[oracle@slient ~]$
--驗證:
[oracle@one soft]$ pwd
/home/oracle/soft
[oracle@one soft]$
[oracle@one soft]$ ls
[oracle@one soft]$ pwd
/home/oracle/soft
[oracle@one soft]$ ls
tb_pt.dmp
[oracle@one soft]$
四、示例解釋
例子:
#!/usr/bin/expect
#set timeout 20 #設定超時時間
spawn ssh root@192.168.43.131
expect "*password:"
send "123\r"
# expect "*#"
interact
解釋:
1.#!/usr/bin/expect :需要先安裝軟體,然後來說明用expect來執行
2.spawn ssh root@192.168.43.131 :spawn是進入expect環境後才可以執行的expect內部命令,用來執行它後面的命令。
3.expect "*password:" :也是expect的內部命令,用來解惑關鍵的字串,如果有,就會立即返回下面設定的內容,如果沒有就看是否設定了超時時間。
4.send "123\r":這時執行互動式動作,與手工輸入密碼等效,在expect截獲關鍵字之後,它就會輸入send後面的內容。
5.interact :執行完畢後把持互動狀態,把控制檯,這時候就可以進行你想要進行的操作了。如果沒有這一句,在登陸完成之後就會退出,而不是留在遠端終端上。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2222571/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux下expect安裝Linux
- Linux 下 Go 環境搭建以及 Gin 安裝LinuxGo
- 簡單安裝PHP在Linux下的執行環境PHPLinux
- Linux環境下elasticsearch-6.2.2安裝以及配置LinuxElasticsearch
- Linux下安裝Python,以及環境變數的配置LinuxPython變數
- Linux下Java環境安裝LinuxJava
- Linux環境下安裝NginxLinuxNginx
- Linux下安裝Go環境LinuxGo
- linux環境下redis安裝LinuxRedis
- Windows環境下安裝LinuxWindowsLinux
- Linux環境下nginx安裝配置LinuxNginx
- Linux環境下ApacheActiveMQ基本安裝LinuxApacheMQ
- linux或者CentOS環境下安裝.NET Core環境LinuxCentOS
- 在linux環境安裝單機RocketMQLinuxMQ
- Linux 下使用 Docker 安裝lnmp環境LinuxDockerLNMP
- linux環境下安裝nginx步驟LinuxNginx
- Linux 環境下編譯安裝 RedisLinux編譯Redis
- Linux環境下Apache ActiveMQ 基本安裝LinuxApacheMQ
- DVWA下載、安裝、使用(漏洞測試環境搭建)教程
- Java8.0下載安裝以及配置環境Java
- CRF++在Windows下以及Linux下的安裝及測試方法CRFWindowsLinux
- Linux環境下 RabbitMQ 的下載與安裝LinuxMQ
- jenkins簡單安裝及配置(Windows環境JenkinsWindows
- Linux環境下透過docker安裝mysqlLinuxDockerMySql
- 如何在 Linux 環境下安裝使用 pycharm?LinuxPyCharm
- Linux環境下nodejs和cnpm的安裝LinuxNodeJSNPM
- linux環境下軟體安裝之MavenLinuxMaven
- Linux 環境下如何安裝部署 RocketMQ 教程LinuxMQ
- yapi 在linux環境下的安裝部署APILinux
- Linux下安裝JDK及環境設定LinuxJDK
- kafka環境安裝及簡單使用(單機版)Kafka
- Linux安裝jdk環境LinuxJDK
- Linux環境安裝GOLinuxGo
- Windows下安裝java jdk和tomcat執行環境簡單整理WindowsJavaJDKTomcat
- 效能測試工具JMeter的安裝及環境配置--Windows和LinuxJMeterWindowsLinux
- Windows 環境下 Python 環境安裝WindowsPython
- Linux環境PostGIS原始碼編譯安裝Linux原始碼編譯
- 簡單安裝與使用虛擬環境virtualenv