本来想在网上找一个可以限制远程 IP 访问的脚本,结果一个都不能用;因此,花了几天一边改脚本,一边看 Oracle 的官网手册,最后测试通过了!

代码示例

#!/usr/bin/bash

# 执行  bash /etc/block_ssh.sh
#
# TO-DO
#
# 1.0.1        8/19 21:49
#
# 1.0.0   2021/08/01 22:24:48-2021/08/01 22:37:30
#       根据 /etc/block_ssh.csh 改编,相应日志文件为
#           tail -f /var/adm/messages
#           tail -f  /var/log/alarm_`hostname`.log
#           tail -f  /usr/tmp/remote.log



# 获取 tty 值
tmn=`who am i | awk '{print $2;}'`

# 获取当前 IP
# who am i| awk '{print $2,$6;}'
#login_ip=`finger |grep $tmn | awk '{print $6;}'`
login_ip=` who -um | awk '{print $8;}' | sed -e 's/(//g; s/)//g' `
# bash 去除前缀 ${login_ip#*(} 和后缀 ${login_ip%*)}
echo $login_ip

# 获取当前 PID 值
login_pid=`who -um | awk '{print $7;}'`

login_name=`echo $LOGNAME`
if [ "$login_ip" = "" -o "$login_ip" = ":0" -o "$login_ip" = ":0.0" ]; then
    type_x="local"
else
    type_x="remote"
fi

# chmod 622 /usr/tmp/remote.log
echo -e "`date +%Y-%m-%d\ %H:%M:%S` \t $login_name \t $login_ip" >> /usr/tmp/remote.log
echo $type_x

trap 1 2 3 9 15
if [ "$type_x" = "local" -o "$login_ip" = "10.0.2.2" ]; then
    echo "   Welcome......"
    logger -p user.info  "Someone has logined in: $login_ip \!"
else
    echo "   Warning"
    # 需要转义:英文叹号
    logger -i -p user.err -t SSH "Remote IP is login: $login_ip \!"
    logger -ip user.alert "Unauthorized remote IP is login: $login_ip \!"
    #logger -p user.warning  'Unknown IP is login'
    # 测试表明,上述报警同时在 系统日志和用户日志中存储

    # kill remote ssh link
    pkill -9 -t $tmn
    #kill -9 $login_pid

fi

姊妹篇