阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

linux通过shell脚本实现ssh交互式自动化

86次阅读
没有评论

共计 1470 个字符,预计需要花费 4 分钟才能阅读完成。

导读 expect 是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预(如:借助 Expect 处理交互的命令,可以将交互过程:ssh 登录,ftp 登录等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率)

我们通过 Shell 可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如 telnet 服务器等进行交互的功能。而 expect 就使用来实现这种功能的工具。expect 是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预(如:借助 Expect 处理交互的命令,可以将交互过程:ssh 登录,ftp 登录等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率)

首先需要有 expect:

可以通过以下命令查看是否安装,如果未安装直接 yum install expect,如果不行请自行百度安装。

[root@localhost home]# whereis expect
expect: /usr/bin/expect /usr/share/man/man1/expect.1.gz

[root@localhost home]# expect
编写脚本如下:
#!/bin/bash
passwd="123456"
/usr/bin/expect <<-EOF
set timeout 50
spawn ssh  root@10.10.22.38
expect {"*yes/*" { send "yes\r"; exp_continue}
"*password:" {send "$passwd\r"}
}
expect "*]*"
send "df -h\r"
EOF

解释一下:

/usr/bin/expect <<-EOF  #开始用 expcet 执行标志
EOF  #结束标志
expect {} #是 expect 要实现交互的命令集
[root@localhost home]# ssh root@10.10.22.38
"*yes/*"
"*password:" {send "$passwd\r"} #如上如果遇到返回值 * 代表无限字符,后面是 password: 则执行 send 发送字符串 \r 回车
expect "*]*"    #等待出现 ] 执行下一条命令
send "df -h\r"  #执行命令并回车。登录后复制 
#!/bin/bash
passwd="admin"
/usr/bin/expect <<-EOF set timeout 50 spawn telnet 0 expect {"Login*" { send "admin\r"} } expect {"*assword:" { send "$passwd\r"} } expect {"*admin>" {send "security enable protocol-detect\r"}
}
expect {"*admin>" {send "security set port-abnormal detect 2\r"}
}
expect {"*admin>" {send "security show protocol-detect status\r"}
}
expect {"*admin>" {send "security show port-abnormal-detect level\r"}
}
expect {"*admin>" {send "exit\r"}
}

EOF

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计1470字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中