(一)脚本功能介绍

登录使用复制功能(f12打开控制台,document.body.contentEditable=‘true’)

(二)创建用户

1,创建用户lanmao

useradd lanmao

2,创建免密登录

ssh-keygen

在这里插入图片描述
在这里插入图片描述
注意:将要ssh登录lanmao的用户的公钥内容放在lanmao用户的authorized_keys文件中,authorized_keys文件权限严格要求,只能是600.

3,验证登录

ssh  lanmao@remotehost

4,禁止特定用户使用密码SSH 登录

vim /etc/ssh/sshd_config
#匹配User
Match User user1,user2,user3
        PasswordAuthentication no
#匹配group
Match Group group
        PasswordAuthentication no
#匹配root用户。
Match User !root
        PasswordAuthentication no

注意:限制所有就不要使用match条件了。Match条件块的结束标识为下一个Match指令或者是文件结束。重启sshd后再次密码登录验证失败

systemctl restart sshd

5,用户免密sudo

vim /etc/sudoers
#添加如下内容username普通用户名称。允许用户在任何地方运行任何命令都不需要密码
username   ALL=(ALL)NOPASSWD:ALL
#可以如下格式限制,指定用户在执行/bin目录下的hello目录的时候 不需输入密码
username   ALL=(ALL)NOPASSWD:/bin/hello
chmod -w /etc/sudoers

6,禁止root登录。

vim /etc/ssh/sshd_config

在这里插入图片描述

 systemctl restart sshd

Ps:到此就完成了禁止root用户登录。禁止密码登录,允许lanmao用户执行sudo命令

7,脚本内容。

#/bin/bash
SSHDFILE="/etc/ssh/sshd_config"
NPFILE="/etc/sudoers"
KEY=`cat /tmp/private`
PUB=`cat /tmp/private.pub`
EUSER=`ls /home/`
ENPUSER=`grep "ALL=(ALL)NOPASSWD:ALL" $NPFILE |awk '{print $1}'`
echo "首次使用会下载expect,会比较慢,请耐心等待"
echo -e "当前自建用户有n$EUSERn具有免密执行sudo的用户有n$ENPUSER"
read -p $'若要执行删除任务,键入【yes进入删除界面,不做任何事无需任何键入n' DEL
while [ "$DEL" == "yes" ] 
do
    read -p $'键入【usyes进入删除用户选项,键入【npyes进入删除sudo权限选项,不做任何事无需任何键入n' DELCHOO
    while [ "$DELCHOO" == "usyes" ]
    do
        read -p $'请输入需要删除的账户:n' DELUS
        if [ "$DELUS" == "root" ];then
            echo "你吃多了?"
        elif [ -z $DELUS ];then
            echo "输入了一个空账户"
        else
            userdel -r $DELUS >/dev/null
            if [ $? -eq 0 ];then
                echo "自建用户$DELUS已删除"
            else
                echo "错误的账户输入"
            fi
        fi
        NOWEUSER=`ls /home/`
        echo -e "当前自建用户有:n$NOWEUSER"
        read -p $'若要继续执行删除用户任务,键入【usyes】,否则无需任何键入n' DELCHOO
    done
    while [ "$DELCHOO" == "npyes" ]
    do
        read -p $'请输入需要解除权限的sudoler:n' DELNP
        if [ "$DELNP" == "root" ];then
            echo "你吃多了?"
        elif [ -z $DELNP ];then
            echo "输入了一个空账号"
        else
            chmod +w $NPFILE
            sed -i "/$DELNP.*ALL/d" $NPFILE
            chmod -w $NPFILE
            echo "此处不做判断建议复制粘贴,若是不存在的账户也不返回报错!!!"
        fi
        NOWENPUSER=`grep "ALL=(ALL)NOPASSWD:ALL" $NPFILE |awk '{print $1}'`
        echo -e "当前有免密执行sudo的用户有:n$NOWENPUSER"
        read -p $'若要继续执行解除sudoler任务,键入【npyes】否则无需任何键入n' DELCHOO 
    done
    read -p $'若要继续执行删除任务,键入【yes】进入删除界面,否则无需任何键入n' DEL
done
read -p $'是否需要为用户开启免密sudo权限,键入【yes】进入ADD选项,否则无需任何键入n' ADDNP
while [ "$ADDNP" == "yes" ]
do
    NOWEUSER=`ls /home/`
    echo -e "当前自建用户有:n$NOWEUSER"
    NOWENPUSER=`grep "ALL=(ALL)NOPASSWD:ALL" $NPFILE |awk '{print $1}'`
    echo -e "当前有免密执行sudo的用户有:n$NOWENPUSER"
    read -p $'键入需要开启免密的用户:n' ADDUS
    TIME=`date +%Y%m%d%H%M`
    cp $NPFILE /tmp/sudoers-$TIME
    chmod +w $NPFILE
    NOPASS="$ADDUS   ALL=(ALL)NOPASSWD:ALL"
    echo -e "$NOPASS" >> $NPFILE
    grep $NOPASS $NPFILE >/dev/null
    if [ $? -eq 0 ];then
        echo "$USER免密执行sudo已完成。。。$NOPASS"
        chmod -w $NPFILE
    else
        echo "执行异常,请手动检测。。。备份文件/tmp/sudoers-$TIME"
        chmod -w $NPFILE
    fi
    NOWEUSER=`ls /home/`
    echo -e "当前自建用户有:n$NOWEUSER"
    NOWENPUSER=`grep "ALL=(ALL)NOPASSWD:ALL" $NPFILE |awk '{print $1}'`
    echo -e "当前有免密执行sudo的用户有:n$NOWENPUSER"
    read -p $'是否需要为用户开启免密sudo权限,键入【yes】进入删除界面,否则无需任何键入n' ADDNP
done  
read -p $'是否需要更改ssh_port,键入【yes】进入更改界面,否则无需任何键入n' SSHPORT
while [ "$SSHPORT" == "yes" ]
do
    read -p $'键入需要端口号:n' port
    if [[ $port =~ ^[0-9]+$ ]];then
        if  [[ $port > 65535 ]] || [[ $port < 1 ]];then
            echo "无效端口建议>1000,<65535,且未占用端口"
        else     
            PORT="Port $port"
            TIME=`date +%Y%m%d%H%M`
            cp $SSHDFILE /tmp/ssh_config-$TIME
            sed -i "/^Port.*/d" $SSHDFILE
            echo -e "n$PORT" >>$SSHDFILE
            systemctl restart sshd 
            if [ $? -eq 0 ];then
                echo "重启sshd成功,可验证是否已更改sshd端口号$port"
            else
                echo "sshd服务重启失败,请查看是否/etc/ssh/sshd_config文件中有配置多个Port xx"
            fi
        fi
    else
        echo "输入的端口整数"
    fi
    read -p $'是否需要更改ssh_port,键入【yes】进入更改界面,否则无需任何键入n' SSHPORT
done
read -p $'请将私钥内容粘贴n/tmp/privaten请将公钥内容粘贴n/tmp/private.pubn准备工作完成后输入【yes/no】以开始结束!!n' READMAIN
if [ "$READMAIN" == "no" ];then
    exit 1
elif [ "$READMAIN" == "yes" ];then
    read -p $'创建用户:n' USER
    if [ -z $USER ];then
        echo "你输入了一个空账户"
    else
        USSHDIR="/home/$USER/.ssh/"
        yum -y install expect >/dev/null
        if id -u $USER >/dev/null >&amp;2;then
            echo "$USER exists"
        else
            useradd $USER
            expect <<EOF
                    set timeout 10
                    spawn -noecho su - $USER -c ssh-keygen
                    expect {
                        "id_rsa):" {send "n";exp_continue}
                        "passphrase):" {send "n";exp_continue}
                        "again:" {send "n"}
                    }
                    send_user "nn$USER创建成功n"
EOF
            echo -e "$KEY" >$USSHDIR/id_rsa
            echo -e "$PUB" >$USSHDIR/id_rsa.pub
            echo -e "$PUB" >>$USSHDIR/authorized_keys 
            chmod 600 $USSHDIR/authorized_keys
            chown -R $USER:$USER $USSHDIR
            echo "$USER密钥更新完成。。。"
            TIME=`date +%Y%m%d%H%M`
            cp $SSHDFILE /tmp/ssh_config-$TIME
            sed -i '/^#.*PubkeyAuth/s/^#//g' $SSHDFILE
            KEYSH=`grep PubkeyAuth  $SSHDFILE`
            SWITCH=`grep PasswordAuthentication $SSHDFILE |awk '{print $2}'`
            if [ "$SWITCH" == "yes" ];then
            sed -i "s/PasswordAuthentication yes/PasswordAuthentication no/g" $SSHDFILE
            else
                :
            fi
            systemctl restart sshd
            if [ $? -eq 0 ];then
                SWITCHQ=`grep PasswordAuthentication $SSHDFILE`
                echo -e "禁止用户密码登录完成。。。$SWITCHQn允许用户使用秘钥登录。。。$KEYSH"
            else
                echo "sshd服务异常,请检测。。。备份文件/tmp/ssh_config-$TIME"
                exit 1
            fi
            read -p $'允许免密执行sudo命令[yes],不添加直接enter/键入非[yes]n' CHOONP
            if [ "$CHOONP" == "yes" ];then
                chmod +w $NPFILE
                TIME=`date +%Y%m%d%H%M`
                cp $NPFILE /tmp/sudoers-$TIME
                NOPASS="$USER   ALL=(ALL)NOPASSWD:ALL" 
                echo -e "$NOPASS" >> $NPFILE
                grep $USER $NPFILE >/dev/null
                if [ $? -eq 0 ];then
                    echo "$USER免密执行sudo已完成。。。$NOPASS"
                    chmod -w $NPFILE
                else
                    echo "执行异常,请手动检测。。。备份文件/tmp/sudoers-$TIME"
                    chmod -w $NPFILE
                fi
            else
                :
            fi
        fi
    fi
else
    echo "请输入yes/no"
fi

原文地址:https://blog.csdn.net/haodayizhizhuzhu/article/details/129087125

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_12503.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注