先上图


再上代码

#!/bin/bash
#author: QingFeng
#qq: 530035210
#blog: http://my.oschina.net/pwd/blog
#自动添加秘钥认证用户
#缺省的配置如下logdir=/data/log/shell          #日志路径
log=$logdir/shell.log            #日志文件
is_font=1                #终端是否打印日志: 1打印 0不打印
is_log=0                 #是否记录日志: 1记录 0不记录
random_time=$(date +%Y%m%d_%H%M%S)datef(){
date "+%Y-%m-%d %H:%M:%S"
}print_log(){
if [[ $is_log -eq 1  ]];then
[[ -d $logdir ]] || mkdir -p $logdir
echo "[ $(datef) ] $1" >> $log
fi
if [[ $is_font -eq 1  ]];then
echo -e "[ $(datef) ] $1"
fi
}#自动生成key
addautoKey(){if [[ ! -f /usr/bin/expect ]];then
print_log "$FUNCNAME():不存在expect函数:开始安装."
yum install tcl-devel  tcl expect  -y  -q
print_log "$FUNCNAME():expect函数:安装完成."
fimkdir -p /tmp/ssh_$random_time
cd /tmp/ssh_$random_time
expect -c "spawn /usr/bin/ssh-keygen -t rsaset timeout -1expect \"\*id_rsa)\*:\"send \"$1\r\"expect \"\*no passphrase)\*:\"send \"$1\r\"expect \"\*again\*:\"send \"$1\r\"expect eof "   > /dev/null
num=$(ls  /tmp/ssh_$random_time/$1* -l |wc -l)
if [[ $num  -eq 2   ]];then
print_log  "$FUNCNAME():该用户$1秘钥自动生成完成,路径: /tmp/ssh_$random_time"
else
print_log  "$FUNCNAME():\033[31m该用户$1秘钥自动生成失败,退出\033[0m"
exit
fi
}#添加用户
addUser(){
if [[  $1 == "" ]];then
print_log "$FUNCNAME():\033[31m用户名不能为空\033[0m"
exit
fi
strlength=$(expr length $1)
if [[ $strlength -lt 5   ]];then
print_log "$FUNCNAME():\033[31m用户名的长度最少大于4,退出\033[0m"
exit
fi
User=$(cat /etc/passwd |grep -v "nologin" |awk -F':' '{if ($3> 500) print $1 }'  |grep "$1")
if [[  -z $User ]];then
print_log "$FUNCNAME():不存在非系统用户:$1,开始添加用户操作."
adduser $1  -g 10
[[ -d /home/$1/.ssh  ]] || mkdir /home/$1/.ssh
addautoKey $1
cp /tmp/ssh_$random_time/$1.pub  /home/$1/.ssh/authorized_keys
chmod 600 /home/$1/.ssh/authorized_keys
chown $1:wheel  /home/$1/  -R
cp /etc/ssh/sshd_config   /etc/ssh/sshd_config_$(date +%Y%m%d_%H%M%S)
sshdUser=$(cat  /etc/ssh/sshd_config |grep "$1")
if [[  -z $sshdUser  ]];then
sed -i "s/AllowUsers/AllowUsers $1/"  /etc/ssh/sshd_config
/etc/init.d/sshd restart
print_log  "$FUNCNAME():更新sshd_config文件并重启sshd完成."
else
print_log  "$FUNCNAME():sshd_config文件中已经存在$1."
fielse
print_log  "$FUNCNAME():已经存在非系统用户:$1,请确认后在添加."
fi }
#查找用户
lookUp(){
loginUser=$(cat /etc/passwd |grep -v "nologin" |awk -F':' '{if ($3> 500) print $1 }')
print_log "$FUNCNAME():如下用户拥有登陆系统权限:\n\033[32m$loginUser\033[0m"
}
#删除用户
deleteUser(){
if [[  $1 == "" ]];then
print_log "$FUNCNAME():\033[31m用户名不能为空\033[0m"
exit
fi
User=$(cat /etc/passwd |grep -v "nologin" |awk -F':' '{if ($3> 500) print $1 }'  |grep "$1")
if [[ ! -z $User   ]];then
print_log "$FUNCNAME():存在非系统用户:$1"
else
print_log "$FUNCNAME():\033[31m不存在非系统用户:$1,退出\033[0m"
exit
fi
userdel -rf $1
if [[ $? -eq 0  ]];then
print_log "$FUNCNAME():删除非系统用户:$1成功."
else
print_log "$FUNCNAME():\033[31m删除非系统用户:$1失败.\033[0m"
fi
cp /etc/ssh/sshd_config   /etc/ssh/sshd_config_$random_time
sed -i "s/$1//g"  /etc/ssh/sshd_config
/etc/init.d/sshd restart
print_log  "$FUNCNAME():更新sshd_config文件并重启sshd完成."}case $1  in add)addUser $2;;look)lookUp;;delete)deleteUser $2;;*)echo -e "
秘钥认证用户自动控制\n用法示例: \n1.添加/删除秘钥认证用户:    ./account.class.sh  add/delete  用户名 \n2.查找可以登陆的用户    ./account.class.sh  look";;    esac

改进版,检测系统是否添加key认证,无则自动添加,批量添加key认证用户

上图:


批量添加用户图:


#!/bin/bash
#author: QingFeng
#qq: 530035210
#blog: http://my.oschina.net/pwd/blog
#自动添加秘钥认证用户
#缺省的配置如下
logdir=/data/log/shell          #日志路径
log=$logdir/shell.log            #日志文件
is_font=1                #终端是否打印日志: 1打印 0不打印
is_log=0                 #是否记录日志: 1记录 0不记录
random_time=$(date +%Y%m%d_%H%M%S)#定义默认公钥
default_publicKey="ssh-dss CCCCB3NzaC1kc3MAAACBAJRKD+AyqOD2gtLSAPpbbMEy/VrMW8Z8fof1nyKA9OppiUWUWdVL9iJGDdBzvVB3hb9KZYX1bsns77KrD/VB+8jsCe/62rrsUmxJoUwvWyF2B+cvboxwe5cdXyTawt1bAMHNq8jiWrgSDaR7bplFXD3I6lwYk89I+ofxafXxmZE7AAAAFQCay8NRvgNMxkbExxhMLeRZBK2xpwAAAIEAhUpYCf0STqTUcTSTabQDmfizywG7+ZFSvppJCMrWdobG/+rZ61tN2xGWK4zRP13NJOVcIDaXsQwhhuZbGD8d1tEwGqldBAlTsouJWGiWPMJPhUfjKEFTIHn8ug2zDP/vE7yNgiuMalhn+Fglt+AMG78tiOCn1P7kYVjPeGklr8AAAACAWm3qmqYOiTIMtShfmcIJc06XOPPOjxXzwntN+c8rmy+gZbI6wx4vRwYbldaduMtPn7Q29BqJfcCAy/P7ymVyrX/a2ksWehddk7HdyUHnq9WAX1+MxE4BZq7nV4MHD3Fyn8bay+D76BgQdZjTta3dNXwbA5WdmJnZi68Bk5ZXcjM="
#定义whell组可以无密码登陆
default_Wheel="%wheel        ALL=(ALL)       NOPASSWD: ALL"
#定义sshd配置文件
default_user="zhangsan"
default_sshdConfig="
Protocol 2
SyslogFacility AUTHPRIV
StrictModes no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
PermitEmptyPasswords no
PasswordAuthentication no
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL
X11Forwarding yes
UseDNS no
Subsystem       sftp    /usr/libexec/openssh/sftp-server
AllowUsers   $default_user"datef(){
date "+%Y-%m-%d %H:%M:%S"
}print_log(){
if [[ $is_log -eq 1  ]];then
[[ -d $logdir ]] || mkdir -p $logdir
echo "[ $(datef) ] $1" >> $log
fi
if [[ $is_font -eq 1  ]];then
echo -e "[ $(datef) ] $1"
fi
}#自动生成key
addautoKey(){if [[ ! -f /usr/bin/expect ]];then
print_log "$FUNCNAME():不存在expect函数:开始安装."
yum install tcl-devel  tcl expect  -y  -q
print_log "$FUNCNAME():expect函数:安装完成."
fimkdir -p /tmp/ssh_$random_time
cd /tmp/ssh_$random_time
expect -c "spawn /usr/bin/ssh-keygen -t rsaset timeout -1expect \"\*id_rsa)\*:\"send \"$1\r\"expect \"\*no passphrase)\*:\"send \"$1\r\"expect \"\*again\*:\"send \"$1\r\"expect eof "   > /dev/null
num=$(ls  /tmp/ssh_$random_time/$1* -l |wc -l)
if [[ $num  -eq 2   ]];then
print_log  "$FUNCNAME():该用户$1秘钥自动生成完成,路径: /tmp/ssh_$random_time"
else
print_log  "$FUNCNAME():\033[31m该用户$1秘钥自动生成失败,退出\033[0m"
exit
fi
}#添加用户
addUser(){
if [[  $1 == "" ]];then
print_log "$FUNCNAME():\033[31m用户名不能为空\033[0m"
exit
fi
strlength=$(expr length $1)
if [[ $strlength -lt 5   ]];then
print_log "$FUNCNAME():\033[31m用户名的长度最少大于4,退出\033[0m"
exit
fi
User=$(cat /etc/passwd |grep -v "nologin" |awk -F':' '{if ($3> 500) print $1 }'  |grep "$1")
if [[  -z $User ]];then
print_log "$FUNCNAME():不存在非系统用户:$1,开始添加用户操作."
adduser $1  -g 10
addautoKey $1
[[ -d /home/$1/.ssh  ]] || mkdir -p /home/$1/.ssh
cp /tmp/ssh_$random_time/$1.pub  /home/$1/.ssh/authorized_keys
chmod 600 /home/$1/.ssh/authorized_keys
chown $1:wheel  /home/$1/  -R
cp /etc/ssh/sshd_config   /etc/ssh/sshd_config_$(date +%Y%m%d_%H%M%S)
sshdUser=$(cat  /etc/ssh/sshd_config |egrep -v "^$|^#" |grep "$1")
if [[  -z $sshdUser  ]];then
sed -i "s/AllowUsers/AllowUsers $1/"  /etc/ssh/sshd_config
/etc/init.d/sshd restart
print_log  "$FUNCNAME():更新sshd_config文件并重启sshd完成."
else
print_log  "$FUNCNAME():sshd_config文件中已经存在$1."
fielse
print_log  "$FUNCNAME():已经存在非系统用户:$1,请确认后在添加."
fi }
#查找用户
lookUp(){
loginUser=$(cat /etc/passwd |grep -v "nologin" |awk -F':' '{if ($3> 500) print $1 }')
print_log "$FUNCNAME():如下用户拥有登陆系统权限:\n\033[32m$loginUser\033[0m"
}
#删除用户
deleteUser(){
if [[  $1 == "" ]];then
print_log "$FUNCNAME():\033[31m用户名不能为空\033[0m"
exit
fi
User=$(cat /etc/passwd |grep -v "nologin" |awk -F':' '{if ($3> 500) print $1 }'  |grep "$1")
if [[ ! -z $User   ]];then
print_log "$FUNCNAME():存在非系统用户:$1"
else
print_log "$FUNCNAME():\033[31m不存在非系统用户:$1,退出\033[0m"
exit
fi
userdel -rf $1
if [[ $? -eq 0  ]];then
print_log "$FUNCNAME():删除非系统用户:$1成功."
else
print_log "$FUNCNAME():\033[31m删除非系统用户:$1失败.\033[0m"
fi
cp /etc/ssh/sshd_config   /etc/ssh/sshd_config_$random_time
sed -i "s/$1//g"  /etc/ssh/sshd_config
/etc/init.d/sshd restart
print_log  "$FUNCNAME():更新sshd_config文件并重启sshd完成."}
#检查key认证
checkUser(){
if [[  $default_user == "" ]];then
print_log "$FUNCNAME():\033[31m用户名不能为空\033[0m"
exit
fi
strlength=$(expr length $default_user)
if [[ $strlength -lt 5   ]];then
print_log "$FUNCNAME():\033[31m用户名的长度最少大于4,退出\033[0m"
exit
fi
User=$(cat /etc/passwd |grep -v "nologin" |awk -F':' '{if ($3> 500) print $1 }'  |grep "$default_user")
if [[  -z $User ]];then
print_log "$FUNCNAME():不存在非系统用户:$default_user,开始添加用户操作."
adduser $default_user  -g 10
[[ -d /home/$default_user/.ssh  ]] || mkdir /home/$default_user/.ssh
echo $default_publicKey >   /home/$default_user/.ssh/authorized_keys
chmod 600 /home/$default_user/.ssh/authorized_keys
chown $default_user:wheel  /home/$default_user/  -R
cp /etc/ssh/sshd_config   /etc/ssh/sshd_config_$(date +%Y%m%d_%H%M%S)
sshdUser=$(cat  /etc/ssh/sshd_config |egrep -v "^$|^#"|grep "$default_user")
if [[  -z $sshdUser  ]];then
echo -e "$default_sshdConfig" > /etc/ssh/sshd_config
sed -i "s/^$//g" /etc/ssh/sshd_config
check_suders=$(cat  /etc/sudoers |egrep -v  "^#|^$"|grep "%wheel")
if [[  -z  $check_suders  ]];then
echo  -e  "$default_Wheel" >>  /etc/sudoers
fi
/etc/init.d/sshd restart
print_log  "$FUNCNAME():添加key认证,更新sshd_config文件并重启sshd完成."
else
print_log  "$FUNCNAME():sshd_config文件中已经存在$default_user."
fielse
check_sshdnum=1
check_sudersnum=1
check_sshd=$(cat /etc/ssh/sshd_config |egrep  -v "^#|^$" |grep "$default_user")
if [[  -z $check_sshd ]];then
check_sshdnum=0
print_log "已经添加$default_user用户,但是没有配置sshd_config"
ficheck_suders=$(cat /etc/sudoers |egrep  -v "^#|^$" |grep "wheel" |grep "NOPASSWD")
if [[  -z $check_suders  ]];then
check_sudersnum=0
print_log "已经添加$default_user用户,但是没有配置sudoers"
fi if [[ $check_sshdnum -ne 0 && $check_sudersnum -ne 0 ]];then
print_log "该服务器已经配置秘钥认证."
fifi}case $1  in add)addUser $2;;look)lookUp;;delete)deleteUser $2;;check)checkUser ;;*)echo -e "
秘钥认证用户自动控制\n用法示例: \n1.添加/删除秘钥认证用户:    ./account.class.sh  add/delete  用户名 \n2.查找可以登陆的用户    ./account.class.sh  look\n3.检测系统是否是key认证,不是则添加key认证   ./account.class.sh  check\n(默认增加一个[$default_user]的认证用户)";;    esac

文章转载自 开源中国社区 [http://www.oschina.net]

秘钥认证用户自动控制相关推荐

  1. 远程LInux和秘钥认证

    一.使用putty和xshell远程Linux主机 putty和xshell都是一个能远程连接linux系统的终端工具,使用终端工具便于远程维护操作复制粘贴内容,xshell还支持用户密码保存及多窗口 ...

  2. 【Linux】循序渐进学运维-服务篇-SSH秘钥认证

    大家好,我是高胜寒,本文是Linux运维-循序渐进学运维-服务篇的第5篇文章 文章目录 前言 为什么用密钥认证 秘钥认证流程 秘钥生成及使用 1. 交互式创建及分发秘钥 a) 生成秘钥 b) 分发秘钥 ...

  3. Ansible秘钥认证

    Ansible ping模块的使用 环境: Ansible端:192.168.178.14 被控节点:192.168.178.13 在Ansible端/etc/ansible/hosts文件内添加被控 ...

  4. Putty使用秘钥认证时,报错:Disconnected: No supported authentication methods available

    Putty使用秘钥认证时,报错:Disconnected: No supported authentication methods available(server sent: publickey,g ...

  5. 关于linux中的 秘钥认证 ,最清晰解读

    所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上.登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来.远程主机用事先储存的公钥进行解 ...

  6. xshell 秘钥连接_如何使用PuTTY和xshell 分别远程连接linux,并配置秘钥认证

    使用PuTTY 连接并配置密钥认证 第一步:下载PuTTY 下载 .zip   64位的电脑 32位的putty也能用 第二步:配置基本信息 打开 PuTTY 端口默认是22 (端口是可以改的) ip ...

  7. 秘钥认证登录CentOS 7

    生成密钥对ssh-keygen 并将公钥文件copy到服务端~.ssh/authorized_keys 将公钥上传到服务器 [root@node01 .ssh]# cp id_rsa.pub auth ...

  8. 利用OpenSSH实现基于秘钥的认证

    利用OpenSSH实现基于秘钥的认证 SSH协议介绍:     SSH是Secure Shell的缩写,意思是安全的shell          目前版本有 ssh v1和ssh  v2:在目前工作中 ...

  9. ceph秘钥管理机制

    文章目录 引言 CephX 是什么? CephX 的命名规则 默认用户 谁才是 CephX 中的鼻祖? CephX 使用场景 MON OSD Client 细说 caps MON权限介绍 r 权限 w ...

最新文章

  1. Spring 注解 @Resource和@Autowired(转)
  2. SAP SD 销售凭证如何设置字段必填
  3. 守护线程Daemon的理解
  4. ascii modbus vc源码_MODBUS ASCII及MODBUS RTU通讯
  5. python初心记录二
  6. 安卓学习笔记07:事件处理、窗口跳转与传递数据
  7. java邮件设置成可修改_Java实现发送邮件(可配置)忘记密码,发送邮件
  8. mysqlbinlog工具_mysqlbinlog命令详解 Part 5 通过位置和时间查看日志
  9. Javascript项目
  10. python微信抢红包脚本_这个Python脚本牛逼了,秒抢红包就算了,还能无视撤回消息...
  11. 计算机毕业设计Java幼儿园管理系统(源码+系统+mysql数据库+Lw文档)
  12. 关于音频芯片MICIN和LINEIN,HPOUT和OUT的区别
  13. 硬笔书法三要素:笔法、结构和章法
  14. 整型数字的英文表达和中文表达
  15. 数据字典的作用和定义(软件工程)
  16. 洛谷P2689 东南西北
  17. win7网络共享连接计算机需要密码,win7系统共享打印机需要用户名和密码的解决办法...
  18. 编译原理 实验四 LR(0)分析法(LR0分析表的自动生成)
  19. 简易英文问答系统(glove.6B词向量)
  20. Python数据可视化之Matplotlib-基础详细篇

热门文章

  1. 404页面模板php,Thinkphp5老司机网站报错404页面模板源码
  2. Mix-land拓荒的星际勇者 | 实验
  3. 如何用JS判断身份证格式
  4. 干掉activity、flowable,阿里开源工作流引擎compileflow使用指南
  5. 时间继电器HHS5-B使用方法
  6. UnityThread子线程使用只能在主线程中调用的函数或Unity API
  7. html ul li 横排居中排列
  8. Android 避免主线程执行网络请求之Activity/Fragment 结束后处理异步回调
  9. 论文降重方法有哪些?
  10. 2022年5月大学英语B统考题库复习考试题(网络统考最新题库)