在shell脚本嵌入except代码实现免交互自动化
linux expect详解(ssh自动登录)shell脚本实现scp自动登录远程服务器示例:
#!/bin/bash
#嵌入脚本
/usr/bin/expect " //进程返回ftp>时
send "binary\r" //向进程输入binary\r
expect "ftp> " //进程返回ftp>时
send "get test.tar.gz\r"//向进程输入get test.tar.gz\r
这段代码的作用是登录到ftp服务器ftp ftp.uu.net上,并以二进制的方式下载服务器上的文件test.tar.gz。程序中有详细的注释。
4.interact
到现在为止,我们已经可以结合spawn、expect、send自动化的完成很多任务了。但是,如何让人在适当的时候干预这个过程了。比如下载完ftp文件时,仍然可以停留在ftp命令行状态,以便手动的执行后续命令。interact可以达到这些目的。下面的demo在自动登录ftp后,允许用户交互。
spawn ftp ftp.test.com
expect "Name"
send "user\r"
expect "Password:"
send "123456\r"
interact
解决方法
上文中提到:
如何从机器A上ssh到机器B上,然后执行机器B上的命令?如何使之自动化完成?
下面一段脚本实现了从机器A登录到机器B,然后执行机器B上的pwd命令,并停留在B机器上,等待用户交互。具体含义请参考上文。
#!/home/tools/bin/64/expect -f
set timeout -1
spawn ssh $BUser@$BHost
expect"*password:" { send "$password\r" }
expect"$*" { send "pwd\r" }interact
注:此文章属懒惰的肥兔原创,版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接
若您觉得这篇文章还不错请点击下右下角的推荐,有了您的支持才能激发作者更大的写作热情,非常感谢。
如有问题,可以通过lzrabbit@126.com联系我。
原文链接:https://www.cnblogs.com/lzrabbit/p/4298794.html
页:
[1]