HiSEN

shell & expect 实现 MySQL 命令行自动登录

0. 背景

由于目前经常需要登录数据库查询相关数据
每次进行登录一系列操作,有点费劲
于是乎想着看看怎么自动化

限制:需要在堡垒机进行操作

1. 知识

1.1 expcet

expect是一个自动化交互套件,
主要应用于执行命令和程序时,
系统以交互形式要求输入指定字符串,实现交互通信。

1.2 awk

Awk是一种便于使用且表达能力强的程序设计语言,
可应用于各种计算和数据处理任务。
入门指南

2. 脚本

2.1 自动登录脚本

说明:基于 expect
文件:mysqlLogin.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr//bin/expect -f
set ip [lindex $argv 0]
set port [lindex $argv 1]
set user [lindex $argv 2]
set password [lindex $argv 3]

spawn mysql -h$ip -u$user -P$port -p
set timeout 1000
expect "Enter password:"
send "$password\r"
expect ">"
send "use xxx_database\r"
interact

2.2 获取信息并登录

说明:通过 shell 动态获取登录信息
文件:autologin.sh

1
2
3
4
5
6
7
8
9
#!/usr/bin/bash
ips=`get_single_ip_by_domain hisen.me`
ip=($(echo $ips | awk '{print $2}'))
port=($(echo $ips | awk '{print $3}'))
echo "+---------------------------+"
echo "| Login to MySQL offline |"
echo "+---------------------------+"
# 调用上面的脚本,包含 4 个参数
expect /root/soft/login/mysqlLogin.sh $ip $port user pwd

2.3 快捷命令设置

设置完成之后,输入 ma 命令,即可自动登录到 MySQL 客户端

1
2
cat ~/.bashrc
alias ma='sh /root/soft/login/autologin.sh'

3. 参考文档