shell图形化跳板机

shell图形化跳板机

在CentOS6系统中,我们可以使用setup指令来修改网卡的IP等信息,交互起来十分方便
在CentOS7系统中,setup命令已经没有了,但是还有nmtui命令,可以让我们修改IP和主机名。

那么whiptail命令的作用,就是出现一个可以交互的图形化界面,并且样式有很多。

信息框

img

#!/bin/bash
#信息框
whiptail --title "跳板机 $HOSTNAME Disk Info" --msgbox "`df -h`" 30 80

whiptail 就是出现一个可以交互的图形化界面
--title # 指定标题内容 跳板机 $HOSTNAME Disk Info
-- msgbox #指定信息内容 `df -h`
30 # 展示信息的高度为30
80 # 展示信息的宽度为80

返回值

#!/bin/bash
#信息框
whiptail --title "跳板机 $HOSTNAME Disk Info" --msgbox "`df -h`" 30 80 
echo $?

布尔值的选择框

#!/bin/bash
#信息框
whiptail --title "跳板机 $HOSTNAME Disk Info" --yesno '请输入你的选择 YES or NO' 30 80
if [ $? -eq 0 ];then
        echo '你选择的是yes'
else
        echo '你选择的是no'
fi

img

#!/bin/bash
#信息框
whiptail --title "选择你的岗位" --yes-button 'ops' --no-button 'dev' --yesno '请选择' 30 80
if [ $? -eq 0 ];then
        echo '你选择的是ops'
else
        echo '你选择的是dev'
fi

--title      # 指定标题内容
--yes-button # yes的按钮可以改名
--no-button  # no的按钮可以改名
--yesno      # 布尔值框 后面可以是追加框内的内容

img

交互式输入框

whiptail --title <标题> --inputbox "<信息>" 高度 宽度 默认值

#!/bin/bash
#信息框
whiptail --title "jump server" --inputbox '请输入一个文件路径' 20 50
3>&1 1>&2 2>&3

img

#!/bin/bash
#交互输入框
source_file=`whiptail --title "jump server" --inputbox "请输入一个文件路径" 20 50 例:/etc/passwd 3>&1 1>&2 2>&3`
dest_file=`whiptail --title "jump server" --inputbox "请输入一个对端存放路径" 20 50 例:/opt 3>&1 1>&2 2>&3`

echo $source_file $dest_file
scp $source_file 172.16.1.7:$dest_file

img

img

#!/bin/bash
#交互输入框
source_file=`whiptail --title "jump server" --inputbox "请输入一个文件路径" 20 50 例:/etc/passwd 3>&1 1>&2 2>&3`
dest_file=`whiptail --title "jump server" --inputbox "请输入一个对端存放路径" 20 50 例:/opt 3>&1 1>&2 2>&3`

source_file=`whiptail --title "jump server" --inputbox "请输入一个文件路径" 20 50 例:/etc/passwd 3>&1 1>&2 2>&3`
if [ $? -eq 0 ];then
dest_file=`whiptail --title "jump server" --inputbox "请输入一个对端存放路径" 20 50 例:/opt 3>&1 1>&2 2>&3`
        if [ $? -eq 0 ];then
                scp $source_file 172.16.1.7:$dest_file
        else
                echo '请输入一个文件路径'
        fi
else
        echo '  请输入一个源文件路径'
fi

密码输入框

#!/bin/bash
#交互输入框
passwd=`whiptail --title 'jump' --passwordbox "请输入密码:" 10 60 3>&1 1>&2 2>&3`
if [ $? -eq 0 ];then
        echo $passwd
else
        echo '取消了选择'
fi

img

img

img

img

passwd=`whiptail --title 'jump' --passwordbox "请输入密码:" 10 60 3>&1 1>&2 2>&3`
if [ $? -eq 0 ];then
        if [ ${#passwd} -ne 0 ];then
                echo "密码是 $passwd"
        else
                echo '密码为空'
        fi
else
        echo '取消选择'
fi

[root@web02 ~]# sh tutb.sh 
密码为空
[root@web02 ~]# sh tutb.sh 
取消选择

菜单栏

whiptail --title<标题> --menu"<信息>" 高度宽度 页面显示个数

# 执行结果
ok是0
cencel是1

# 五个选项 页面显示4个个数会出现滚轮 写反斜需要空格衔接
#!/bin/bash
whiptail --title "jump" --menu "根据菜单选择" 30 60 4 \
"1" "lb01" \
"2" "lb02" \
"3" "web01" \
"4" "web02" \
"5" "web03" 3>&1 1>&2 2>&3

img

img

#!/bin/bash
whiptail --title "jump" --menu "根据菜单选择" 30 60 5 \
"1" "lb01 10.0.0.5" \
"2" "lb02 10.0.0.6" \
"3" "web01 10.0.0.7" \
"4" "web02 10.0.0.8" \
"5" "web03 10.0.0.9" 3>&1 1>&2 2>&3

img

#!/bin/bash
res=`whiptail --title "jump" --menu "根据菜单选择" 30 60 5 \
"1" "lb01 10.0.0.5" \
"2" "lb02 10.0.0.6" \
"3" "web01 10.0.0.7" \
"4" "web02 10.0.0.8" \
"5" "web03 10.0.0.9" 3>&1 1>&2 2>&3`

echo $res

# echo执行结果为选项结果

img

img

单选框

# 语法
whiptail --title "jump" --radiolist "信息" 高度 宽度 页面显示个数

#!/bin/bash
whiptail --title "jump" --radiolist "请在下面选择一项" 30 80 4 \
"send" "发送文件" OFF \
"useradd" "创建用户" OFF \
"ssh" "远程连接" ON \
"mem" "查看内存" OFF 3>&1 1>&2 2>&3

tab键可以选择ok或者cancel 空格可以进行单选框选择 方向键可以上下移动

img

# 返回值
ok是0
cancel是1

#!/bin/bash
res=`whiptail --title "jump" --radiolist "请在下面选择一项" 30 80 4 \
"send" "发送文件" OFF \
"useradd" "创建用户" OFF \
"ssh" "远程连接" ON \
"mem" "查看内存" OFF 3>&1 1>&2 2>&3`

echo $res

img

img

复选框

whiptail --title "jump" --checklist"<信息>" 高度 宽度 页面显示个数

#!/bin/bash
res=`whiptail --title "jump" --checklist "请在下面选择一项或多项" 30 80 4 \
"send" "发送文件" OFF \
"useradd" "创建用户" OFF \
"ssh" "远程连接" ON \
"mem" "查看内存" OFF 3>&1 1>&2 2>&3`

echo $res

img

img

#!/bin/bash
res=$(whiptail --title "jump" --checklist "请在下面选择一项或多项" 30 80 4 \
"send" "发送文件" OFF \
"useradd" "创建用户" OFF \
"ssh" "远程连接" ON \
"mem" "查看内存" OFF 3>&1 1>&2 2>&3)

echo ${res//\"}
echo $res|sed 's#"##g'

for n in $res;do
        if [ ${n//\"/} == "send" ];then
                echo '发送文件'
        elif [ ${n//\"/} == "useradd" ];then
                echo '创建用户'
        elif [ ${n//\"/} == "ssh" ];then
                echo '远程连接'
        elif [ ${n//\"/} == "mem" ];then
                echo '查看内存'
        fi
done

# 去除引号的方法
echo ${res//\"}
或
echo $res|sed 's#"##g'
或
for n in $res;do
        if [ ${n//\"/} == "send" ];then
                echo '发送文件'
        elif [ ${n//\"/} == "useradd" ];then
                echo '创建用户'
        elif [ ${n//\"/} == "ssh" ];then
                echo '远程连接'
        elif [ ${n//\"/} == "mem" ];then
                echo '查看内存'
        fi
done

img

img

进度条

{
    for ((i = 0 ; i <= 100 ; i+=30)); do
        sleep 1
        echo $i
    done
} | whiptail --gauge "等一下子,正在安装" 6 60 0

img

图形化跳板机

推送免密密钥

# 生成密钥
ssh-keygen -t rsa

# 推送密钥(m01推向其他机器)
ssh-copy-id user@hostname
# 例
ssh-copy-id root@172.16.1.7

主界面

vim txtbj.sh
#登陆用户
yonghu=$(whiptail --title "跳板机-10.0.0.61" --menu "根据菜单选择登陆的用户" 30 60 10 \
"1" "ops" \
"2" "dev" \
"3" "test" 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
        case $yonghu in
        1)
                echo "欢迎运维人员"
                sh yw_xz.sh
                ;;
        2)
                echo "欢迎开发人员"
                sh kf_xz.sh
                ;;
        3)
                echo "欢迎测试人员"
                sh cs_xz.sh
                ;;
        esac
else
        echo "取消了登陆"
        exit
fi

运维跳板机菜单

vim yw_tbj.sh
#运维跳板机菜单栏
lb01=172.16.1.5
lb02=172.16.1.6
web01=172.16.1.7
web02=172.16.1.8
web03=172.16.1.9
nfs=172.16.1.31
backup=172.16.1.41
db01=172.16.1.51
db02=172.16.1.52
zabbix=172.16.1.71
option=$(whiptail --title "跳板机-10.0.0.61" --menu "根据菜单选择接下来的操作" 30 60 10 \
"1" "lb01" \
"2" "lb02" \
"3" "web01" \
"4" "web02" \
"5" "web03" \
"6" "nfs" \
"7" "backup" \
"8" "db01" \
"9" "db02" \
"10" "zabbix" 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
        case $option in
        1)
                ssh root@$lb01
                ;;
        2)
                ssh root@$lb02
                ;;
        3)
                ssh root@$web01
                ;;
        4)
                ssh root@$web02
                ;;
        5)
                ssh root@$web03
                ;;
        6)
                ssh root@$nfs
                ;;
        7)
                ssh root@$backup
                ;;
        8)
                ssh root@$db01
                ;;
        9)
                ssh root@$db02
                ;;
        10)
                ssh root@$zabbix
                ;;
        esac
else
        echo "取消了选择"
        exit
fi

开发跳板机菜单

vim kf_tbj.sh
#!/bin/bash
#开发跳板机菜单栏
web01=172.16.1.7
web02=172.16.1.8
web03=172.16.1.9
option=$(whiptail --title "跳板机-10.0.0.61" --menu "根据菜单选择接下来的操作" 30 60 10 \
"1" "web01" \
"2" "web02" \
"3" "web03"  3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
        case $option in
        1)
                ssh root@$web01
                ;;
        2)
                ssh root@$web02
                ;;
        3)
                ssh root@$web03
                ;;
        esac
else
        echo "取消了选择"
        exit
fi

测试跳板机菜单

vim cs_tbj.sh
#!/bin/bash
#测试跳板机菜单
lb01=172.16.1.5
lb02=172.16.1.6
option=$(whiptail --title "跳板机-10.0.0.61" --menu "根据菜单选择接下来的操作" 30 60 10 \
"1" "lb01" \
"2" "lb02"  3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
        case $option in
        1)
                ssh root@$lb01
                ;;
        2)
                ssh root@$lb02
                ;;
        esac
else
        echo "取消了选择"
        exit
fi

输入密码并进入选择界面

vim yw_xz.sh
#!/bin/bash
#交互输入框
password=$(whiptail --title 'jump' --passwordbox "请输入密码:" 10 60 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
       if [ ${#password} -ne 0 ];then
           grep -wq "^$password" yw_mima.txt
#运维选择界面
xuanzhe=$(whiptail --title "跳板机-10.0.0.61" --menu "根据菜单选择操作" 30 60 10 \
"1" "传输文件" \
"2" "登陆跳板机" \
"3" "查看服务器信息" 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
        case $xuanzhe in
        1)
                sh chuanshu.sh
                ;;
        2)
                sh yw_tbj.sh
                ;;
        3)
                sh xinxi.sh
                ;;
        esac
else
        echo "取消了选择"
fi
       else
           echo "账号或密码错误"
       fi
else
        echo '取消了选择'
fi

vim cs_xz.sh 
#!/bin/bash
#交互输入框
password=$(whiptail --title 'jump' --passwordbox "请输入密码:" 10 60 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
       if [ ${#password} -ne 0 ];then
           grep -wq "^$password" cs_mima.txt
#测试选择界面
xuanzhe=$(whiptail --title "跳板机-10.0.0.61" --menu "根据菜单选择操作" 30 60 10 \
"1" "传输文件" \
"2" "登陆跳板机" \
"3" "查看服务器信息" 3>&1 1>&2 2>&3)
        if [ $? -eq 0 ];then
                case $xuanzhe in
                1)
                        sh chuanshu.sh
                        ;;
                2)
                        sh cs_tbj.sh
                        ;;
                3)
                        sh xinxi.sh
                        ;;
                esac
        else
                echo "取消了选择"
        fi
       else
           echo "账号或密码错误"
       fi
else
        echo '取消了选择'
fi

vim kf_xz.sh
#!/bin/bash
#交互输入框
password=$(whiptail --title 'jump' --passwordbox "请输入密码:" 10 60 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
       if [ ${#password} -ne 0 ];then
           grep -wq "^$password" kf_mima.txt
#测试选择界面
xuanzhe=$(whiptail --title "跳板机-10.0.0.61" --menu "根据菜单选择操作" 30 60 10 \
"1" "传输文件" \
"2" "登陆跳板机" \
"3" "查看服务器信息" 3>&1 1>&2 2>&3)
        if [ $? -eq 0 ];then
                case $xuanzhe in
                1)
                        sh chuanshu.sh
                        ;;
                2)
                        sh kf_tbj.sh
                        ;;
                3)
                        sh xinxi.sh
                        ;;
                esac
        else
                echo "取消了选择"
        fi
       else
           echo "账号或密码错误"
       fi
else
        echo '取消了选择'
fi

传输界面

vim chuanshu.sh
#!/bin/bash
#选择服务器地址
jump_server=$(whiptail --title "Jump Server" --inputbox "请输入目标服务器IP:" 10 50 3>&1 1>&2 2>&3)
        if [ $? -ne 0 ];then
                echo "取消了连接"

fi
#交互输入框
source_file=`whiptail --title "jump server" --inputbox "请输入一个文件路径" 20 50 例:/etc/passwd 3>&1 1>&2 2>&3`
if [ $? -eq 0 ];then
dest_file=`whiptail --title "jump server" --inputbox "请输入一个对端存放路径" 20 50 例:/opt 3>&1 1>&2 2>&3`
   if [ $? -eq 0 ];then
                scp $source_file $jump_server:$dest_file
        if [ $? -eq 0 ];then
                echo "文件传输成功"
        else
                echo "文件传输失败,请检查输入的文件路径与服务器配置"
        fi
   else
        echo "请输入一个文件路径"
   fi
else
        echo "请输入一个源文件路径"
fi

查看信息界面

vim xinxi.sh
#!/bin/bash
#选择服务器地址
jump_server=$(whiptail --title "Jump Server" --inputbox "请输入目标服务器IP:" 10 50 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then

   echo "取消了连接"

fi
#信息框
whiptail --title "跳板机 $jump_server Disk Info" --msgbox "`ssh root@$jump_server df -h`" 30 80
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇