如何在shell脚本中调用expect实现自动化

需求:  

将10.10.50.16:/home/build下的debug.tcl, good.tcl best.tcl 远程拷贝到10.10.51.16:/home/build下


方法:

1)将debug.tcl, good.tcl best.tcl 分行写入到filename中

eg.  cat filename

# file name 

debug.tcl

good.tcl

best.tcl


2)在shell脚本中调用expect实现远程拷贝, 代码如下:

#!/bin/sh

for _item in `cat filename | grep -v '#'`;do
    expect -c "
    set timeout 60
    spawn scp $_item 10.10.51.16:/home/build
    expect {
        \"*yes/no*\" {send \"yes\r\"}
        \"*assword:\" {send \"build\r\"}
    }

    expect eof
    "
    echo "$_item is ok..."
done;

注意:

1)运行上述shell脚本的机器上必须正确安装了expect


Shell脚本,可以通过Expect脚本自动化地通过SSH连接到堡垒机(也称为跳板机)并执行命令。Expect是一个用于自动化控制交互式应用程序的命令解释器,比如telnet、ftp、passwd、fsck、rlogin、ssh或者甚至是系统上的命令行。 以下是使用Expect脚本通过SSH连接到堡垒机并执行命令的基本步骤: 1. 安装Expect。在大多数Linux发行版,可以通过包管理器安装Expect,例如在Ubuntu可以使用`sudo apt-get install expect`命令安装。 2. 创建一个Expect脚本,使用`spawn`命令启动SSH会话,然后使用`expect`命令等待特定的字符串(通常是密码提示),接着使用`send`命令发送密码。 3. 在Shell脚本调用Expect脚本。 下面是一个简单的示例: ```bash #!/usr/bin/expect # 调用SSH命令连接到堡垒机 spawn ssh 用户名@堡垒机地址 # 等待密码提示 expect "password:" # 发送密码(注意:为了避免密码显示在历史记录,应当使用send_user) send_user "你的密码\n" # 交互模式,让脚本继续交互式操作 interact ``` 将上述脚本保存为`ssh_to_bastion.exp`,然后通过Shell脚本调用它: ```bash #!/bin/bash expect ssh_to_bastion.exp ``` 确保将`用户名`、`堡垒机地址`和`你的密码`替换为实际的值,并根据实际情况调整脚本。 使用Expect脚本自动化SSH登录时需要注意安全性,因为脚本会包含明文密码。出于安全考虑,建议使用密钥认证来替代密码认证,或者使用更安全的凭证管理方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值