工作运维需要远程不输入密码运行命令,鼓捣了下expect,实现了一个远程调用的函数。 调用方式ssh_exec ip pwd cmd。记录一下免得以后找不到了需要重新搞。 其他人有需要可以直接用,不过记得适配一下自己的环境,主要的应该是expect里面的*#匹配,这个匹配的是linux系统上的shell的固定显示的那部分,比如linux-osewGl:~ #之类的。
function ssh_exec () {
local ip=$1
local passwd=$2
local cmd=$3
[ -z "$ip" -o -z "$passwd" -o -z "$cmd" ] && return 1
/usr/bin/expect << EOF
proc remote_exec {ip passwd cmd} {
spawn ssh root@\$ip
exp_internal 0
expect {
"yes/no" { send "yes\\r";exp_continue}
"*password:" {send "\$passwd\\r"}
}
expect "*#"
send "\$cmd\\r"
expect "*#"
send "exit"
close
}
remote_exec "$ip" "$passwd" "$cmd"
EOF
}
function scp_get () {
local ip=$1
local passwd=$2
local src=$3
local dst=$4
[ -z "$ip" -o -z "$passwd" ] && return 1
/usr/bin/expect << EOF
proc remote_exec {ip passwd src dst} {
spawn scp root@\$ip:\$src \$dst
exp_internal 0
expect {
"yes/no" { send "yes\\r";exp_continue}
"*password:" {send "\$passwd\\r"}
}
expect eof
}
remote_exec "$ip" "$passwd" "$src" "$dst"
EOF
}