有时候集群外的机子需要临时登入测试集群查看某台机子的状况,
又不想频繁输入用户名密码,则可以参考以下例子.使用expect实现.
用法示例1: ./login.sh (登入default_host的test用户)
用法示例2: ./login.sh 192.168.3.38 (登入192.168.3.38的test用户)
用法示例3: ./login.sh test 192.168.3.38 (登入192.168.3.38的test用户)
用法示例4: ./login.sh testuser 192.168.3.38 (登入192.168.3.38的testuser用户)
用法示例5: ./login.sh root rootpaswd 192.168.3.39 (登入192.168.3.39的root用户)
#!/usr/bin/expect
set timeout 30
set default_user "test"
set defaul_passwd "test123"
set testuser_passwd "123456"
set default_host "192.168.8.46"
set user $default_user
set passwd $defaul_passwd
if { $argc == 0} {
set host $default_host
}
if { $argc == 1 } {
set host [lindex $argv 0]
}
if { $argc == 2 } {
set user [lindex $argv 0]
set host [lindex $argv 1]
if { $user != $default_user } {
#testuser
set passwd $testuser_passwd
}
}
if { $argc == 3 } {
set user [lindex $argv 0]
set passwd [lindex $argv 1]
set host [lindex $argv 2]
}
spawn ssh -l $user $host
expect {
-re "Are you sure you want to continue connecting (yes/no)?" {
send "yes\r"
expect "assword:"
send "$passwd\r"
} -re "assword:" {
send "$passwd\r"
} -re "Permission denied, please try again." {
exit
} -re "Connection refused" {
exit
} timeout {
exit
} eof {
exit
}
}
interact