秘钥认证用户自动控制

先上图

再上代码

#!/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函数:安装完成."
fi

mkdir -p /tmp/ssh_$random_time
cd /tmp/ssh_$random_time
expect -c "
                spawn /usr/bin/ssh-keygen -t rsa
                set timeout -1
                expect \"\*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."
fi

else 
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
时间: 2024-10-09 11:09:06

秘钥认证用户自动控制的相关文章

openvpn 证书秘钥结合用户密码双重认证(2)客户端端设置

上接  openvpn 证书秘钥结合用户密码双重认证(1)服务器端设置 五.配置客户端-上海站点 1.安装软件 YUM可以使用互联网上的:建议使用一些邮件或者网盘的形式共享,还记得之前 VP服务器上缓存的软件包吗,当然也许两台机器环境不一样,依赖包可能不同,这根据自 己的情况定吧. $yum -y install openvpn 2.用你认为合适且安全的途径,把上海站点需要的CA证书.自己的证书和私钥等文件, 从VPN服务器那里搞过来,确保在以及目录里有这些文件. $sudo ls   /etc

openvpn 证书秘钥结合用户密码双重认证(1)服务器端设置

Openvpn 环境: 拓扑图: 出差人员win7 client 115.16.1.8/30 | 郑州站点------------互联网-------上海站点 内网:192.168.20.0   |         内网:192.168.10.0.24 | eth0 :   1.1.1.1/30 北京Open VPN(iptables) eth1:  192.168.0.1/24 | eth0:  192.168.0.100/24 公司内网 web server 希望屏幕前的你,能看懂O(∩_∩

SFTP秘钥认证

到当前用户目录下 cd ~ /home/[user] 找到 .ssh目录 cd .ssh ssh-keygen -t rsa   执行创建密钥对命令 Generating public/private rsa key pair. Please be patient....   Key generation may take a few minutes Enter file in which to save the key (/home/ap/appnms/.ssh/id_rsa): # 按回车保

SSH密码和秘钥认证原理

SSH登录方式主要分为两种: 1. 用户名密码验证方式 说明: (1) 当客户端发起ssh请求,服务器会把自己的公钥发送给用户: (2) 用户会根据服务器发来的公钥对密码进行加密: (3) 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功. 2. 基于密钥的登录方式 说明: (1) 首先在客户端生成一对密钥(ssh-keygen): (2) 并将客户端的公钥ssh-copy-id 拷贝到服务端: (3) 当客户端再次发送一个连接请求,包括ip.用户名: (4) 服务

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

所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上.登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来.远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求输入密码,这和之前的ssh账号密码也没有直接关系. 也就是说,如果你已经利用A可以远程免密登录到B,如果 你现在想让C也能能免密登录到B,最简单的方法就是,把A的私钥拷贝到 C就行,然后就可以直接进行免密进行 登录了. 可参考 原文地址:htt

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

利用OpenSSH实现基于秘钥的认证 SSH协议介绍:     SSH是Secure Shell的缩写,意思是安全的shell          目前版本有 ssh v1和ssh  v2:在目前工作中大多都使用ssh v2版,ssh  v1已经不安全,尽量不使用              ssh v1:基于CRC-----32做MAC(Message Authentication Code),不安全              ssh v2:基于双方主机的协商最安全的MAC的方式:基于DH算法做秘

Centos 6.5 x64 本地用户秘钥登陆

线上服务器统一使用秘钥登陆,密码登陆直接被禁止了. 默认都是root登陆,开发要求能登陆服务器,查看目录里面的文件.所以需要创建一个普通用户,以及普通用户的秘钥 创建用户 useradd lisi 设置密码 passwd lisi 使用xshell生成秘钥 方法参考 http://jingyan.baidu.com/article/e5c39bf5ba78e639d760330e.html 然后把生成的公钥写入/root/.ssh/authorized_keys 文件 测试登陆,发现死活验证失败

Linux ssh服务开启秘钥和密码认证

问题描述: 实现Linux秘钥和密码同时认证 解决方案: vim /etc/ssh/sshd_config 基本参数: PermitRootLogin yes #允许root认证登录 PasswordAuthentication yes #允许密码认证 RSAAuthentication yes #秘钥认证 PubkeyAuthentication yes 详细参数列表 [[email protected] ~]# cat /etc/ssh/sshd_config # $OpenBSD: ssh

阿凡达学Linux-----Putty秘钥登录

SSH服务支持一种安全认证机制,就是秘钥认证,它使用的就是一对加密的字符串,一个称为公钥,用于加密,任何人都可以看到其内容,另一个称为私钥,用于解密,只有拥有者才能够看到其内容. 秘钥对是指公钥加密(或者非对称加密) 的加密算法,比如RSA和DSA等,这类秘钥对是指公钥和私钥.其中,公钥可以随便发放,只用于加密,私钥则只由一人持有,只用于解密.任何用公钥加密的信息,用私钥解密后即可得到原来的信息. RSA秘钥对的工作原理如下: 假设两个用户A,B进行通信,A和B都要产生一对用于加密和解密的公钥和