Linux创建登录用户(附上脚本)

(一)脚本功能介绍

未登录使用复制功能(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$EUSER\n具有免密执行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/private\n请将公钥内容粘贴在\n/tmp/private.pub中\n准备工作完成后输入【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 >&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 "\n\n$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 "禁止用户密码登录完成。。。$SWITCHQ\n允许用户使用秘钥登录。。。$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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值