Linux学习之路-脚本练习

实现免密登陆脚本, expect登陆远程主机,将生成的密钥写入到目标主机, expect测试远程登陆。
1)通过shift读取脚本参数
2)通过select来选择功能.例如功能有

  • 安装mysql
  • 安装apache
  • 免密钥登陆主机
    当前我们只实现免密钥登陆主机
    3)通过函数封装每个功能
    4)将免密钥登陆的过程可以重复进行, while 循环实现重复,需要有退出过程。当用户输入exit时,退出免密钥功能。
    5)支持输入一批主机免密钥,使用数组 实现
#!/bin/bash
# **********************************************************
#
# * Author        : zxk
# * Email         : zxknico@foxmail.com
# * Create time   : 2022-09-02 22:31
# * Filename      : main_test.sh
# * Description   : 
#
# **********************************************************
declare -A host
ssh_except () {
    echo "免密登录功能现在运行"
    while [ -n "$1" ];do #shift两两读取脚本参数,依次为主机IP和密码,然后向其发送生成的公钥文件
    hostip=$1
    shift
    secret=$1
    shift
    host[$hostip]=$secret
    echo "shift传参完成"
    done
    while true;do #while循环实现多次的免密登录和增加免密登录的主机
    cat <<EOF
    请选择1-3
    1)再次确认免密登录主机IP和登录密码
    2)输入测试主机IP
    3)退出免密登录
EOF
    read -p "您的选择:" i
    case $i in
    1)
    read -p"IP和密码:" hostip secret
    host[$hostip]=$secret
    #创建公钥 -P:密码为空 -f:指定公钥位置(实现无交互创建公钥)
    [ ! -f /root/.ssh/id_rsa.pub ] && ssh-keygen -t rsa -P '' &>/dev/null
    expect <<EOF
    spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$hostip
    expect {
        "yes/no" { send "yes\n";exp_continue } 
        "password" { send "$secret\n" }
    }
    expect eof
EOF
    ;;
    2)
    read -p"测试ip:"  testip
    ssh root@$testip
    ;;
    3)
    break
    ;;
    esac
    done

}
main="--安装myspl --安装apache  --免密钥登录主机 --退出"
select i in $main;do 
        case $REPLY in
                1)
                        echo "安装mysql成功"
                        ;;
                2)
                        echo "安装apache成功"
                        ;;
                3)
                        ssh_except $*

                        ;;
                4)      break
                        ;;

        esac
done

运行展示

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容