<返回更多

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

2022-08-07  51CTO  
加入收藏

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

我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如te.NET服务器等进行交互的功能。而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 "yesr"; exp_continue }
"*password:" { send "$passwdr" }
}
expect "*]*"
send "df -hr"
EOF

解释一下:

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

 

  • 原文来自:https://blog.51cto.com/u_14181351/5508763
  • 本文地址:https://www.linuxprobe.com/linux-shel-telnet.html编辑:张雄,审核员:逄增宝
  • Linux命令大全:https://www.linuxcool.com/
  • Linux系统大全:https://www.linuxdown.com/
  • 红帽认证RHCE考试心得:https://www.rhce.net/
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>