All Articles

SMS 인증번호를 Mac 클립보드에 자동으로 복사하기

휴대폰 본인인증은 보통 SMS로 인증 번호를 보내고, 그 번호를 화면에 입력하는 것으로 이루어져 있습니다. iPhone에서 본인 인증을 요청했다면 자동으로 인증 번호가 키보드 위에 뜨기 때문에 편리합니다. Mac에서 본인 인증을 요청했다면, 인증 번호를 수동으로 입력해야 합니다. 대출 테스트를 수없이 진행하다 보니 인증 번호를 타이핑 하는 것이 너무 귀찮았습니다.

iPhone에서 Mac으로 SMS를 전달하려면 연속성 기능을 활성화하면 됩니다. Apple Support의 iPhone에서 iPad, iPod touch 또는 Mac으로 SMS/MMS 문자 메시지를 전달하는 방법 링크대로 설정하면 SMS가 iPhone에서 Mac으로 잘 넘어옵니다.

받아온 문자 메시지는 Mac의 ~/Library/Messages/chat.db 파일에 SQLite 데이터베이스 형태로 저장됩니다. 이를 0.1초마다 읽어서, 4자리에서 6자리의 숫자가 포함된 문자 메시지가 오면 pbcopy 명령어로 클립보드에 복사하고, terminal-notifier 명령어로 알림을 보내게 하는 간단한 Python 스크립트를 작성해 보았습니다.

import sqlite3
import os
import time
import re
import subprocess

conn = sqlite3.connect(os.environ['HOME'] + '/Library/Messages/chat.db')
cur = conn.cursor()

latest_rowid = None

while True:
    cur.execute("select rowid, text from message order by date desc limit 1")

    rowid, text = cur.fetchone()

    if latest_rowid is None:
        latest_rowid = rowid
    
    if latest_rowid != rowid:
        latest_rowid = rowid
        numbers = re.findall(r'\d{4,6}', text)
        if len(numbers) == 1:
            number = numbers[0]
            process = subprocess.Popen('pbcopy', env={'LANG': 'en_US.UTF-8'}, stdin=subprocess.PIPE)
            process.communicate(number.encode('utf-8'))
            subprocess.call([
                "terminal-notifier", 
                "-group", "sms-code-to-clipboard", 
                "-title", "SMS 인증번호 클립보드에 복사됨", 
                "-message", f"인증번호 [{number}]가 클립보드에 복사되었습니다."],
            )

    time.sleep(0.1)

간단하게 시연해 보았습니다. SMS 인증번호가 클립보드에 잘 복사되는 것을 확인할 수 있습니다.