Expect 批量登陸多臺伺服器辦法
Expect是基於TCL語言的,也就是說可以在Expect裡直接使用TCL語言。只用Expect基本的命令有些應付不了比較複雜的使用場景,比如批量登陸多臺伺服器等。使用TCL語言可以很方便地控制程式。
以下的程式碼完成用SSH登陸到多臺不同IP,不同登陸密碼的伺服器 上
------------------------------------------------------------------------------------------------------------------
#!/usr/bin/expect
#!/bin/bash
set port 22
#node setting
# ip:login_user:login_passwd:
set nodeinfo "10.77.20.153:root:sisesise
192.168.1.1:root:mypassword1
192.168.1.2:root:mypassword2
192.168.1.3:root:mypassword3
192.168.1.4:root:mypassword4
foreach node $nodeinfo {
set host_info [split $node ":"]
set ssh_ip [lindex $host_info 0]
set ssh_loginName [lindex $host_info 1]
set ssh_loginPasswd [lindex $host_info 2]
send_user "=======================begin...=====================/n"
#ssh into the host
spawn ssh -D $port
expect {
"*yes/no*" {
send "yes/r";
expect "*assword*";
send "$ssh_loginPasswd/r"
}
"*assword*" {
send "$ssh_loginPasswd/r"
}
}
expect "*#"
send "ls/r"
------------------------------------------------------------------------------------------------------------------------------------
#現在已經登陸到伺服器ssh_ip上,可以新增自己需要的程式碼。這是我工作程式碼中的一部分,我沒有仔細檢查是否可以執行(別忘了安裝expect:)。
#如果執行不了可以郵我
}