[Ubuntu] SSH 접속 시 텔레그램 알람보내기 #2 (메시지발송편)

[Ubuntu] SSH 접속 시 텔레그램 알람보내기 #2 (메시지발송편)
Photo by Dima Solomin / Unsplash

지난 편에서 텔레그램 봇을 생성했고, 본격적으로 서버에 작업을 하기 전에 PC에서 메시지를 발송해보는 테스트를 해보려고 한다. 메시지를 발송하는 방법은 아주 간단하게 웹브라우저에서 특정 URL을 호출하는 방식으로 해볼 수 있다.


연관 포스트

  1. [Ubuntu] SSH 접속 시 텔레그램 알람보내기 #1 (봇생성편)
  2. [Ubuntu] SSH 접속 시 텔레그램 알람보내기 #2 (메시지발송편)
  3. [Ubuntu] SSH 접속 시 텔레그램 알람보내기 #3 (명령어로 메시지발송 테스트)
  4. [Ubuntu] SSH 접속 시 텔레그램 알람보내기 #4 (최종편)

A. API Token 재확인

만약에 텔레그램 봇의 API Token을 적어두지 않았으면 다시 봇파더에게 물어본다.

텔레그램 메신저 캡쳐화면 1 (직접 캡쳐 후 편집)

봇파더의 메뉴에서 /mybots를 선택한다.

텔레그램 메신저 캡쳐화면 2 (직접 캡쳐 후 편집)

내 계정에서 생성한 봇의 목록이 나오고, 그 봇을 클릭하면...

텔레그램 메신저 캡쳐화면 3 (직접 캡쳐 후 편집)
텔레그램 메신저 캡쳐화면 4 (직접 캡쳐 후 편집)

여러 개의 버튼이 나오는데.. 그 중에서 API Token을 클릭하면, 기존에 발행받은 API Token을 재확인 할 수 있다.[1]


  1. 이렇게 원할 때 확인이 가능하므로 굳이 다른 곳에 저장해둘 필요는 없다.(괜히 저장해뒀다가 타인에게 노출되면 더 피곤..) ↩︎

B. 봇 상태 확인

API Token을 확인했으면 이제 봇의 상태를 확인하기 위한 URL을 만들어본다.

※ 본 포스트에는 API Token을 보호하기 위해서 [API_TOKEN]으로 대체하겠다. 각자 생성한 봇의 API Token으로 대체하면 된다.

웹브라우저를 열고서 아래의 URL을 호출한다.[1]

  • URL sample : https://api.telegram.org/bot[API_TOKEN]/getUpdates
  • example
    • API Token : 57412121:AAEF-Zjsdlsd-----YPk[2]
    • URL : https://api.telegram.org/bot57412121:AAEF-Zjsdlsd-----YPk/getUpdates[3]

  1. 가능하면 메모장과 같은 곳에 URL을 완성하고 붙여넣는 것을 추천한다. ↩︎

  2. 예제로 사용한 Token은 발급받은 Token의 중간부분을 임의로 변경한 것이므로 동작하지 않는다. ↩︎

  3. https://api.telegram.org/bot 바로 뒤에 발급받은 Token을 바로 붙여넣으면 된다. ↩︎

엣지 웹브라우저 (직접 캡쳐 후 편집)

C. 내 Chat_id 확인

지금 하려는 작업은 ssh로 누군가가 로그인을 하면, Telegram bot을 통해서 나한테 특정한 메시지를 보내는 것을 만들고 있다.

Telegram bot이 특정 사용자에게 메시지를 보내려면, 그 사용자의 chat_id를 알아야하는데 봇에게 임의의 메시지를 발송하고 getUpdates 명령어를 이용하면 확인할 수 있다.

텔레그램 메신저 캡쳐화면 5 (직접 캡쳐 후 편집)

텔레그램봇에게 임의의 텍스트를 발송한다. 그 뒤에 앞서 실행했던 getUpdates를 실행하면...

{
   "ok":true,
   "result":[
      {
         "update_id":103310160,
         "message":{
            "message_id":2,
            "from":{
               "id":55450--869,
               "is_bot":false,
               "first_name":"SIMPLISM",
               "language_code":"ko"
            },
            "chat":{
               "id":55450--869,
               "first_name":"SIMPLISM",
               "type":"private"
            },
            "date":1688536120,
            "text":"what is my chat id?"
         }
      }
   ]
}

웹브라우저에 위와 같은 json 데이터가 반환된다.[1]

위 JSON 데이터를 대략적으로 정리하면 아래와 같다.

  1. "ok":true : getUpdates를 정상적으로 수행했다.
  2. `"result":[~~~] : getUpdates의 결과를 반환했다.
  3. "update_id":103310160 : getUpdates를 수행한 id는 103310160이다.[2]
  4. "message":{~~~} : 새로운 메시지가 들어왔다.
  5. "message_id":2 : 새로운 메시지의 id는 2이다.
  6. "from":{~~~} : 새로운 메시지를 발송한 사용자의 정보
  7. "id":55450--869 : 새로운 메시지를 발송한 사용자의 ID(chat_id)는 55450--869이다.
  8. 이하는 생략...

어차피 내가 알고자하는 값은... 내 텔레그램 계정의 id(chat_id)이므로 여기에서 확인된 값은 55450--869이다.


  1. 실제로 반환된 데이터는 위 처럼 정리된 형태가 아니고 한줄로 이어진 Text로 반환된다. 위는 보기 편하게 하기 위해서 Json Formatter로 정렬한 것이다. ↩︎

  2. 텔레그램 API 문서를 확인하면 result로 반환된 값의 상세 설명을 확인할 수 있다.(영어로...) ↩︎

D. 메시지 발송테스트

지금까지는 getUpdates 메소드를 이용했는데, 새로운 메소드를 이용한다.(sendMessage 얼마나 직관적인가..ㅎㅎ)

  • URL sample : https://api.telegram.org/bot[API_TOKEN]/sendMessage?chat_id=[CHAT_ID]&text=[MESSAGE]
  • example
    • API_TOKEN : 57412121:AAEF-Zjsdlsd-----YPk
    • CHAT_ID : 55450--869
    • MESSAGE : test
    • URL : https://api.telegram.org/bot57412121:AAEF-Zjsdlsd-----YPk/sendMessage?chat_id=55450--869&text=test

위의 sample과 example를 참고해서 최종 URL을 만든 뒤에 웹브라우저로 실행해보면...

{
   "ok":true,
   "result":{
      "message_id":3,
      "from":{
         "id":6215768963,
         "is_bot":true,
         "first_name":"simplism-ssh-alarm",
         "username":"simplism_ssh_alarm_bot"
      },
      "chat":{
         "id":55450--869,
         "first_name":"SIMPLISM",
         "type":"private"
      },
      "date":1688537969,
      "text":"test"
   }
}

위와 같은 JSON 데이터가 반환된다. 대략적으로 JSON 데이터를 설명해보면, simplism_ssh_alarm_botSIMPLISM(chat_id가 55450--869인 사용자)에게 test라는 text 메시지를 보냈다라는 내용이다.

텔레그램 메신저 캡쳐화면 6 (직접 캡쳐 후 편집)

위 처럼 봇이 보낸 test라는 메시지를 수신한 것을 확인할 수 있다.

E. 마치면서..

정상적으로 메시지가 봇을 통해서 나한테 발송되는 것을 확인했으니... 이제 대망의 bash shellscript를 작성할 차례다. 그나마 1,2편은 스크린샷이 있어서 크게 어렵지 않았을 것 같은데 bash shellscript 부분은 소스코드가 거의 대부분이라서 읽는 사람한테 잘 전달되도록 글 작성이 가능할까?

좀 걱정은 되지만 계속 해보자!

F. 참고문서

  1. Telegram Bot API, Telegram 공식홈페이지, unknown author, 2023/04/21 updated

Read more

[Oracle] DB계정 생성 시 참고사항

[Oracle] DB계정 생성 시 참고사항

사용환경 * Oracle DBMS : 19c (19.3) A. 시작하기 전에.. 최근에 몇 개의 DB서버를 셋팅하면서 DB계정을 생성할 일이 많이 있었는데 루틴하게 수행하던 쿼리에 약간 의문이 생겨서 몇 가지 테스트를 해봤다. 그 내용을 잘 기억하기 위해서 정리해서 적어본다.(누군가한테 도움이 될 수도 있지만 실제론... 이렇게 블로그 포스트로 만들다보면 결국 내 기억에 각인이

By simplism
[Linux] Mariadb Docker container 설치

[Linux] Mariadb Docker container 설치

A. 사용환경 * OS : Rocky Linux 9.5 (Blue Onyx) * Docker : 28.0.4 * Portainer : 2.27.3 LTS B. 시작하기 전에... 어떤 소프트웨어를 사용하더라도 보통 Database는 거의 필수로 필요한 편이다.(요즘엔 SQLite도 많이써서... DB서버가 없어도 되긴하지만 어쨌든!) 업무적으로 사용할 소프트웨어들을 몇개 검토해봤는데, 대부분이 MySQL, Mariadb, PostgreSQL이더라. 일단, 바로 설치해서 사용해볼

By simplism
[Linux] Docker에 Portainer 설치

[Linux] Docker에 Portainer 설치

A. 사용환경 * OS : Rocky Linux 9.5 (Blue Onyx) * Docker : 28.0.4 B. Portainer란? docker를 사용할 때 명령어 기반으로 사용해도 되지만... 여전히 GUI는 필요하다.(ㅎㅎ) Portainer를 간단하게 설명하면 docker 관리소프트웨어(웹기반)정도로 이해해도 된다. Portainer 공식 홈페이지에서 확인해보면 기능이 아주 많은 것 같은데... 사실 나의 경우에는 아주 단순한 기능만

By simplism