您的位置:首页 > 运维架构 > Shell

Shell实战训练营Day11

2018-12-29 21:26 756 查看

expect 分发系统

实现远程自动登录

#!/usr/bin/expect
set host "192.168.200.128" #定义变量
set passwd "123456"
spawn ssh root@$host
expect{
"yes/no" {send"yes\r";exp_continue} #\r表示回车
"password:" {send "$passwd\r"}
}
interact #登录后停留在远程主机界面

远程登录后执行指定命令并退出
#!/usr/bin/expect
set user "root"
set passwd "123456"
spawn ssh $user@192.168.200.128
expect {
"yes/no" {send "yes\r"}
"password:" {send "$passwd\r"}
}
expect "]" #匹配root用户或者普通用的提示符
send "touch /tmp/exp.txt" #执行的命令
expect "]"
send "echo test > /tmp/exp.txt\r" #执行的命令
expect "]*"
send "exit\r" #退出远程主机

expect脚本参数传递

#!/usr/bin/expect
set user [lindex $argv 0] #代表第1个参数 用户
set host [lindex $argv 1] #代表第2个参数 主机地址
set passwd "123456"
set cm [lindex $argv 2] #代表第3个参数 执行的命令
spawn ssh $user@$host
expect{
"yes/no" {send "yes\r"}
"password:" {send $"passwd\r"}
}
expect "]"
send "$cm\r"
expect "]"
send "exit\r"
执行格式 bash shellname root 192.168.100.100 "ls-l;w"

expect 脚本自动同步文件
#!/usr/bin/expect
set passwd "123456"
spawn rsync -av root@192.168.100.100:/tmp/test.txt /tmp/ #从远程主机192.168.100.100 同步文件至本机/tmp/
expect{
"yes/no" {send "yes\r"}
"password:" {send "$passwd\r"}
}
expect eof # 不立即退出带同步结束后退出

指定host与需要同步的文件
#!/usr/bin/expect
set passwd "123456"
set host [lindex $avgr 0]
set file [lindex $avgr 1]
spawn rsync -avR $file root@$host:$file
expect {
"yes/no" {send "yes\r"}
"password" {send"$passwd\r" }
}
expect eof

构建文件分发系统
核心命令 rsync -avR --files-from=filelist / /root@host:/ #文件列表分发
#!/usr/bin/expect
set passwd "123456"
set host [lindex $avgr 0]
set file [lindex $avgr 1]
spawn rsync -avR --files-from=$file / root@host:/
expect{
"yes/no" {send "yes\r"}
"password" {send "$passwd\r"}
}
expect eof

文件系统分发结合的文件与脚本
自定义 iplist
192.168.200.130
192.168.200.131
192.168.200.132
自定义 filelist
/tmp/123
/awk/132
/shell/123
定义同步脚本 rsync.sh
#!/bin/bash
for ip in

cat /usr/local/sbin/ip.list

do
echo $ip
./exp6.exp $ip /usr/local/sbin/file.list #exp6.exp 为shell
done

远程批量执行命令 注:下面的列子中批量执行需要各个主机密码相同
#!/usr/bin/expect
set host [lindex $argv 0]
set passwd "123456"
set cm [lindex $argv 1]
spawn ssh root@$host
expect{
"yes/no" {send"yes\r"}
"password:"{send "$passwd\r"}
}
expect "]"
send $cm\r
expect "]"
send "exit\r"

#!/bin/bash
for ip in

cat /usr/local/sbin/ip.list

do
echo $ip
./exp7.exp $ip "w;free -m;ls"
done

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息