自动执行远程主机命令expect脚本

    2014年第一个脚本,哈哈!!! expect实现远程主机自动执行命令脚本: 

    #!/usr/bin/expect --
    
    if { [llength $argv] < 4 } {
    	puts "Usage: $argv0 ip user passwd port commands timeout"
    	exit 1
    }
    
    match_max 600000
    
    set ip [lindex $argv 0]
    set user [lindex $argv 1]
    set passwd [lindex $argv 2]
    set port [lindex $argv 3]
    set commands [lindex $argv 4]
    set timeoutflag [lindex $argv 5]
    
    set yesnoflag 0
    set timeout $timeoutflag
    
    
    for {} {1} {} {
    # for is only used to retry when "Interrupted system call" occured
    
    spawn /usr/bin/ssh -q -l$user -p$port $ip
    
    expect 	{
    
    	"assword:" {
    		send "$passwd\r"
    		break;
    	}
    
    	"yes/no)?" {
    		set yesnoflag 1
    		send "yes\r"
    		break;
    	}
    
    	"FATAL" {
    		puts "\nCONNECTERROR: $ip occur FATAL ERROR!!!\n"
    		exit 1
    	}
    
    	timeout {
    		puts "\nCONNECTERROR: $ip Logon timeout!!!\n"
    		exit 1
    	}
    
    	"No route to host" {
    		puts "\nCONNECTERROR: $ip No route to host!!!\n"
    		exit 1
    	}
    
    	"Connection Refused" {
    		puts "\nCONNECTERROR: $ip Connection Refused!!!\n"
    		exit 1
    	}
    
    	"Connection refused" {
    		puts "\nCONNECTERROR: $ip Connection Refused!!!\n"
    		exit 1
    	}
    
    	"Host key verification failed" {
    		puts "\nCONNECTERROR: $ip Host key verification failed!!!\n"
    		exit 1
    	}
    
    	"Illegal host key" {
    		puts "\nCONNECTERROR: $ip Illegal host key!!!\n"
    		exit 1
    	}
    		
    	"Connection Timed Out" {
    		puts "\nCONNECTERROR: $ip Logon timeout!!!\n"
    		exit 1
    	}
    
    	"Interrupted system call" {
    		puts "\n$ip Interrupted system call!!!\n"
    	}
    }
    }
    
    if { $yesnoflag == 1 } {
    	expect {
    		"assword:" {
    			send "$passwd\r"
    		}
    
    		"yes/no)?" {
    			set yesnoflag 2
    			send "yes\r"
    		}
    	}
    }
    
    if { $yesnoflag == 2 } {
    	expect {
    		"assword:" {
    			send "$passwd\r"
    		}
    	}
    }
    
    expect {
    	"]" {send "$commands \r"}
    	"assword:" {
    		send "$passwd\r"
    		puts "\nPASSWORDERROR: $ip Password error!!!\n"
    		exit 1
    	}
    }
    
    expect {
    	"]" {send "sleep 1 \r"}
    }
    
    expect {
    	"]" {send "exit\r"}
    }
    
    expect eof {
    	puts "OK_SSH: $ip\n"
    	exit 0;
    }

    用法:

    ./ssh.exp
    Usage: ./ssh.exp ip user passwd port commands timeout
    Wed Jan 1 00:17:28 CST 2014
    • 本文由 发表于 2014-01-01
    • 转载请务必保留本文链接:https://linuxeye.com/387.html
    expect交互简单用法 脚本

    expect交互简单用法

    bash脚本常常需要实现和交互程序如telnet,ftp,scp,ssh服务器等进行交互的功能。而Expect就是用来实现这种功能的工具。 yum -y install expect cat ssh_...
    匿名

    发表评论

    匿名网友