• 정각 알림용으로 메시지를 받고있는 Telegram bot을 이용해 메시지를 보내면 code-server에 사용중인 Nginx 서비스를 시작하고 중지되게 해봤습니다.
  • code-server를 혼자 사용중이라 안쓸 때 보안상 닫고 싶은데 좀 더 편한 방법일까 싶어 작성해봤네요. (Update: Mar 31, 2021)

환경 구성

  • OS: CentOS 7 (on Oracle cloud VM)
  • Code-server: 3.9.0-amd64.rpm
  • Nginx: 1.16.1
  • Python: v3.6.8
  • Linux shell, cron and pyTelegramBotAPI

1. Test Telegram bot listener

;Telegram bot 생성은 생략했습니다. 다음에 기회가되면 남길께요.

USER1@SVR1 ~]$ sudo pip install pyTelegramBotAPI
import telebot
TOKEN = '1234567890:AHC4Roy_cgiiQWjiX8Pl_rZY61_DAnMlMbc'

def listener(messages):
    for m in messages:
        chat_id = str(m.chat.id)
        user_id = m.chat.username
        if m.content_type == 'text':
            text = m.text
            if text == 'start nginx':
                    print(user_id + '(' + chat_id + ') : ', 'Yes, Start Nginx')
            elif text == 'stop nginx':
                    print(user_id + '(' + chat_id + ') : ', 'Yes, Stop Nginx')
            elif text == 'restart nginx':
                    print(user_id + '(' + chat_id + ') : ', 'Yes, Restart Nginx')
            else:
                    print(user_id + '(' + chat_id + ') : ', text)

bot = telebot.TeleBot(TOKEN)
bot.set_update_listener(listener)
bot.polling()
bot.polling(none_stop=False, interval=0, timeout=20)

# Upon calling this function, TeleBot starts polling the Telegram servers for new messages.
# - none_stop: True/False (default False) - Don't stop polling when receiving an error from the    Telegram servers
# -  interval: True/False (default False) - The interval between polling requests
#              Note: Editing this parameter harms the bot's response time
# -   timeout: integer (default 20) - Timeout in seconds for long polling.
# Ref. https://pypi.org/project/pyTelegramBotAPI/

; 메신저 bot에게 메시지를 보내면…

; 조건에 따라 print 합니다.

USER1@SVR1 ~]$ python3 TelegramBot_msgListener-test.py 
helloman(12341234) :  Yes, Start Nginx
helloman(12341234) :  Yes, Stop Nginx
helloman(12341234) :  Yes, Restart Nginx
helloman(12341234) :  hello?
helloman(12341234) :  안녕하세요?

2. Nginx start & stop with TelegramBot

; 아래 Python code를 실행하고 Telegram bot에게 메시지를 보내면 조건문에 맞게 동작합니다.

import telebot, os
TOKEN = '1234567890:AHC4Roy_cgiiQWjiX8Pl_rZY61_DAnMlMbc'

def listener(messages):
    for m in messages:
        chat_id = str(m.chat.id)
        user_id = m.chat.username
        if m.content_type == 'text':
            text = m.text
            if text == 'start nginx':
                    bot.send_message(chat_id, text='OK! start Nginx')
                    os.system('sudo systemctl start nginx.service')
            elif text == 'stop nginx':
                    bot.send_message(chat_id, text='OK! stop Nginx')
                    os.system('sudo systemctl stop nginx.service')
            elif text == 'restart nginx':
                    bot.send_message(chat_id, text='OK! restart Nginx')
                    os.system('sudo systemctl restart nginx.service')
            else:
                    bot.send_message(chat_id, text='Hmm... interesting.')

bot = telebot.TeleBot(TOKEN)
bot.set_update_listener(listener)
bot.polling()
bot.polling(none_stop=False, interval=0, timeout=20)

; 호기심에 구글링 후 만들어봤는데 이제 편하게 누워서도 code-server에 접근 못하도록 nginx를 내릴 수 있겠네요^^

참고