팀원들을 사찰해보자 (feat. Telegram)

Pt J·2020년 8월 5일
0

Story Of My Life

목록 보기
3/31
post-thumbnail

별 건 아니고, 팀원들의 서버 로그인/로그아웃 알림을 받는 방법을 알아보자.

팀원들 | "제발 알아보지 말자"

필요한 건

  • 로그인/로그아웃 알림을 받아오고 싶은 리눅스 서버
  • 해당 서버의 관리자 권한
  • 텔레그램 계정

텔레그램 봇 생성

먼저 @BotFather에게 말을 걸어 텔레그램 봇을 생성해야 한다.
@BotFather는 모든 텔레그램 봇의 아버지다.

@BotFather에게 다음과 같이 말을 걸어보자.

/start

그러면 친절한 @BotFather는 우리가 사용할 수 있는 명령어를 알려준다.

새 봇을 만들려고 하는 것이니 이에 해당하는 명령어를 입력한다.

/newbot

그러면 우리 @BotFather는 다음과 같이 답장을 할 것이다.

@BotFather | Alright, a new bot. How are we going to call it? Please choose a name for your bot.

생성할 봇의 name을 정해달라고 한다.
이것은 중복 가능하며 봇의 프로필 상에 뜨는 이름으로,
텔레그램의 name은 추후에 변경 가능한 nickname에 해당한다.
예를 들어 다음과 같이 대답할 경우

Jason

다음과 같은 이름의 봇이 생성된다.

이름을 정하고 나면 봇의 username을 정해달라고 한다.

@BotFather | Good. Now let's choose a username for your bot. It must end in bot. Like this, for example: TetrisBot or tetris_bot.

텔레그램의 username은 ID에 해당한다.
즉, 변경 불가능하며 봇을 식별하는 데 사용된다.
봇의 usernamebot으로 끝나야 한다는 점을 유의하자.

프라이버시를 위해 생성한 봇의 username은 밝히지 않겠다.

만약 기존에 다른 봇이 사용하고 있는 username을 입력한다면

@BotFather | Sorry, this username is already taken. Please try something different.

라며 다시 입력할 것을 요구하고,
사용 가능할 username일 경우

@BotFather | Done! Congratulations on your new bot. You will find it at t.me/앞서입력한username. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.

Use this token to access the HTTP API:
봇의고유한API-TOKEN
Keep your token secure and store it safely, it can be used by anyone to control your bot.

For a description of the Bot API, see this page: https://core.telegram.org/bots/api

와 같이 성공적으로 봇이 생성되었음을 알리며 API token을 알려준다.
여기서 앞서입력한username봇의고유한API-TOKEN는 고유한 값으로 각자 다를 것이고
API token은 봇을 관리하는 데 이용되므로 유출되지 않도록 주의하자.

자, 이제 봇이 생성되었다.
/mybots 명령어를 통해 봇의 설정을 수정한다거나 프로필 사진을 추가한다거나
그런 추가적인 작업을 할 수 있지만 그 부분은 부차적인 요소이므로 일단 넘어가자.
그 설정 방법은 @BotFather가 친절하게 설명해주므로 자세한 설명은 생략한다.

서버와 연동

자, 이제 서버와의 연동이 필요하다.
@BotFather가 봇 생성이 완료되었다면서 보내준 메시지에 t.me/앞서입력한username라는 링크가 있다.
이걸 누르면 해당 봇과의 채팅으로 넘어가는데 여기서 START를 누르도록 하자.
그러면 이제 봇이 작동하기 시작한다.
물론 아직 그 어떤 기능도 가지고 있지 않다.

웹 브라우저를 열고 다음과 같은 URL을 입력한다.

https://api.telegram.org/bot봇의고유한API-TOKEN/getupdates

봇의고유한API-TOKEN 부분은 앞서 @BotFather가 알려준 token으로 대체한다.
그러면 result.0.message.chat.id 에 봇의 고유한 ID 정수값이 뜨는 걸 볼 수 있다.
이 숫자를 잘 기억해두자. 아니, 기록해두자.

로그인 정보 알림 받기

자, 이제 본격적으로 서버와 연동할 수 있다.
로그인/로그아웃 알림을 받아오고 싶은 서버에 접속하자.
그리고 관리자 권한으로 /etc/bash.bashrc 파일을 열어
맨 아래에 다음과 같은 스크립트를 추가한다.

HOSTNAME_S=`hostname -s`
my_token="봇의고유한API-TOKEN"
chatid="봇의고유한ID"
msg=`echo -e "[login]" $USER"@"$HOSTNAME_S`
curl -F text="$msg" -F chat_id=$chatid,  https://api.telegram.org/bot${my_token}/sendMessage > /dev/null 2>&1

여기서 봇의고유한API-TOKEN봇의고유한ID는 앞서 알아온 값으로 변경해준다.
저장하고나면 이제 다음 로그인부터는 다음과 같은 로그인 알림을 받아올 수 있다.

간단하게 누가 어느 서버에 접속했는가의 정보다.
물론 접속 IP 등의 정보도 알아올 수는 있긴 하지만 아무래도 그런 정보는... 자제하자.
$(date)를 통해 구체적인 초까지 알아올 수도 있지만 그 정도까지 자세할 필요는 없으니
접속 시간은 그냥 알림이 오는 시간으로 만족하자. overhead는 별로 없더라.
그럼에도 불구하고 구체적인 초까지 알고 싶다면 msg에 추가하면 된다.

로그아웃 정보 알림 받기

로그인 시 수행하는 스크립트는 /etc/bash.bashrc에 적으면 모든 사용자에게 적용되지만
로그아웃 시 모든 사용자에게 적용되는 스크립트는 존재하지 않는다.
따라서 개별 사용자의 ~/.bash_logout에 작성해야 한다.
물론 /etc 아래에 공통 스크립트를 작성하고
개별 사용자의 ~/.bash_logout에 그 공통 스크립트를 실행하는 코드를 넣는 방법도 있긴 하다.

아무튼 개별 사용자의 ~/.bash_logout 파일을 얼어
맨 아래에 다음과 같은 스크립트를 추가한다.

HOSTNAME_S=`hostname -s`
my_token="봇의고유한API-TOKEN"
chatid="봇의고유한ID"
msg=`echo -e "[logout]" $USER"@"$HOSTNAME_S`
curl -F text="$msg" -F chat_id=$chatid,  https://api.telegram.org/bot${my_token}/sendMessage > /dev/null 2>&1

앞서 login에서 작성한 것과 동일한 코드에 loginlogout으로 변경했을 뿐이다.
저장하고나면 이제 다음 로그아웃부터는 다음과 같은 로그아웃 알림을 받아올 수 있다.

WARNING!!! | 팀원들이 여러분께 ㅂㄷㅂㄷ을 보냅니다!

그리고 팀원들의 반응

profile
Peter J Online Space - since July 2020

0개의 댓글