服务器登录通知(SSH / TERMINAL)便宜而愉快

给社区的问候。 这是第一本出版物,远非专业管理员,但我只想分享一个简短的经验,这可能对和我一样的新手有用。

碰巧,有必要在Debian上控制大约30个VDS-ok,我安全地将其“转移”到监督(而且我是一名程序员,而不是* nix管理员)。 在更改和检查访问权限的基本操作之后,我想到的第一个念头是:“如果我错过了什么,我想快速了解连接。” 有一些用于绑定SSH授权事件和电子邮件通知的方法(包括在Habré上),我以此为基础,但是我仍然希望能够响应并提供一些信息。 总的来说,我最终得到了这种“系统”,该系统在一个月的时间内都非常成功,并且可以将任何授权信息告知我。

  1. 使用API​​电报的手册,收到了通知bot的令牌和聊天ID(我不会在这里分发,它们很容易且简单地位于搜索引擎的1-2行中)。
  2. 创建了两个脚本,下面将发布其中的代码。 原则上,您可以将所有内容放在一个文件中,但是因为 我想要模块化,然后放入一个单独的脚本,该脚本将通知发送到电报机器人。
  3. 在两个设置文件中,他向脚本添加了一个调用以注册服务器登录事件,然后重新启动了SSH服务。

一切大约需要5至10分钟,不再需要。 好吧,现在实际上是技术。

PS。 一切都在Debian9 x64上运行(如果有的话)。

/ sbin / onlogged

#!/bin/sh if [ "$1" = "ssh" ] && [ -z "$TERM" ] ; then MESS="USER USE SSH AUTH [not console]" elif [ "$1" = "bash" ] && [ ! -z "$TERM" ] ; then if [ ! -z "$SUDO_USER" ] && [ "$TERM" = "linux" ] ; then MESS="USER USE SUDO DISPLAY CONSOLE [terminal]" elif [ ! -z "$SUDO_USER" ] && [ ! "$TERM" = "linux" ] ; then MESS="USER USE SUDO SSH CONSOLE [ssh session]" elif [ "$TERM" = "linux" ] ; then MESS="USER USE DISPLAY CONSOLE [terminal]" elif [ ! -z "$SSH_TTY" ] ; then MESS="USER USE SSH CONSOLE [ssh session]" else MESS="USER LOGGED [unknown]" fi fi if [ ! -z "$MESS" ] ; then if [ ! -z "$SSH_TTY" ] ; then M_TTY=" TTY = $SSH_TTY |" fi if [ ! -z "$SUDO_USER" ] ; then M_SUDO=" SUDO = $SUDO_USER |" fi if [ ! -z "$TERM" ] ; then M_TERM=" TERM = $TERM |" fi SEND="$MESS | USER = $USER |$M_TTY$M_SUDO$M_TERM" /sbin/telegram "$SEND" "ALERT" > /dev/null fi 

/ sbin /电报

 #!/bin/sh if [ $# -gt 0 ] then text="[$2] `cat /etc/hostname` : $1" url="https://api.telegram.org/bot{TOKEN}/sendMessage" curl \ --data-urlencode "chat_id={CHAT_ID}" \ --data-urlencode "text=$text" \ --connect-timeout 10 \ --max-time 10 \ $url > /dev/null 2>&1 else echo "Text is empty" fi 

/ etc / ssh / sshrc

 /sbin/onlogged ssh 

/etc/bash.bashrc

 ...     ... /sbin/onlogged bash 

也许这一切都是平庸而简单的,但是某个人会感兴趣,或者仅仅是创建自己的东西的基础。

Source: https://habr.com/ru/post/zh-CN441774/


All Articles