【Linux】使用expect实现shell自动交互

一、适用场景

因为项目日志位置并不固定,每次查询日志的时候,都需要先通过容器托管平台获取到目标主机的ip和port。然后通过跳板机执行 ssh username@password 登陆容器主机,通过 docker  ps  | grep "端口" 获取dockerId,最后通过 docker exec –it "容器ID" sh 登陆目标主机容器。

二、实现思路

每次手动输入的话效率很低,所以编写了通过expect实现shell自动交互的脚本。

三、脚本代码

#!/usr/bin/expect

#################################################
#日志查看脚本
#1.应用托管平台->集群组管理->业务集群组->实例信息
#2.参数:./脚本名称.sh 主机IP 容器端口
#################################################

#账号密码
set username xxxxx
set password xxxxx

#主机ip
set arg0 [lindex $argv 0]
#主机port
set arg1 [lindex $argv 1]

#入参个数校验
if {$argc < 2} {
    send_user "usage: <param1> <param2> ... "
    exit
}

#登陆跳板机
spawn ssh "$username@$arg0"
expect {
    "*password:" {
        send "$password\r";
    }
}
expect {
    "$username*" {
        #登陆容器
        send "dockerId=`docker ps | grep $arg1 | awk 'NR==1' | awk '{print \$1}'`\r"
        send "echo \$dockerId\r"
        send "docker exec -it \$dockerId sh\r"
    }
}
interact

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值