一、适用场景
因为项目日志位置并不固定,每次查询日志的时候,都需要先通过容器托管平台获取到目标主机的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