본문 바로가기
Network 요거만 알자!

Mosquitto 에서 MQTT동작 (User id/password setting)

by 루카오리 2019. 9. 17.

Mosquitto tool의 설치 및 기본 세팅은 아래의 링크가 설명이 잘되어있으니, 참고하세요.

https://midnightcow.tistory.com/36

지금부터 제가 쓰는 내용은 모든 기본 세팅이 되어있다는 전제하에 동작한다는 점 유념하세요.

아마도 기본적인 MQTT동작은 위 링크의 포스팅 내용에서 확인할수 있을겁니다.

제가 설명하고 하는 내용은 MQTT Broker(이하 내용에는 MQTT Server라 칭한다)에서 User id/Clinet id/password 를 등록한 상태에서 어떻게 통신이 되는지를 설명하려고 해요

구성은 다음과 같이 하려고 합니다.

제가 포스팅 하고 있는 이글은 구성도는 다음과 같다.

도스창에서 Mosquitto를 이용하여 MQTT테스트를 하려면 아래의 사항을 따라야 해요.

- 도스창에서 MQTT Server, MQTT Client는 별도의 도스창을 열어야 하며, 해당 도스창은 관리자 권한으로 열어야 한다.

- Mosquitto.conf파일을 변경하여Client id는 User id와 동일한 id로 동작한다.

- MQTT Server에 접속한 Client에서 온 모든 Publish data는 연결된 모든 Client에 전송된다. 단, 해당 Topic을 Subscribe 상태여야 한다.

- MQTT Server에 접속하는Client의 Client id는 모두 달라야하며, 같은 Client id로 접속할 경우 나중에 접속하는 MQTT Client는 disconnect 된다.

- Password는 암호화 되어 있는 상태를 사용해야 하며, 별도의 TXT 파일을 생성해야한다.

제를 크게 나누자면

1. User id와 Password등록

2. MQTT Server setting 정보

3. MQTT Server와 2개의 MQTT Clinet 접속 예 및 영상


1. User id와 Password등록

1. xxx.txt 파일만들기

2. mosquitto_passwd command를 이용하여 User id, Password 등록하기

User id와 Password를 등록을 하려면

파일을 하나 만드는데, 확장자는 txt 여야해요.

저장되는 형식은 User id : Password 입니다.

xxx.txt 파일만들기

저는 password.txt 파일을 생성했고, 해당 파일은 Mosquitto가 설치 되어 있는 곳에 넣어놨어요.

mosquitto_passwd command를 이용하여 User id, Password 등록하기

아래의 Command를 이용하여 User id와 Password를 등록하면 된다.

#password파일에 User id : irina , Password : asd123^^ 로 추가
#해당 User id가 있다면, Overwrite
mosquitto_passwd -b password.txt irina asd123^^

#User id와 암호화된 Password를 확인할 수 있다.
type password.txt

 

위의 command를 완료한 후 password.txt를 확인하면 아래와 같이 나타납니다.

Password.txt의 Password값은 mosquitto_passwd 명령을 이용하여 암호화된 값이 저장된다.

2. MQTT Server setting 정보

아래는 mosquitto_conf 파일에서 아래의 내용만 Enable했어요.

해당 내용은 주석으로 설명되어있으니, 확인하시면 되요.

저같은 경우에는 Client id를 별도로 주지 않고, User id를 Client id로도 쓸수 있게 옵션을 바꿔놨어요.

# true 일 경우 cliendid가 없어도 접속 가능, false cliendid가 없으면 접속 불가능
allow_zero_length_cliendid false
# true로 설정 시 cliendid를 사용자 명으로 변경을 하고 동시접속자가 생기면 다른 연결을 끊어버립니다.
# 단 cliendid_prefixes와 함께 사용 하면 안됩니다.
# use_identity_as_username 값도 참고 하세요.
use_username_as_cliendid true
# 기본값은 true, true로 설정하면 아무나 브로커 서버에 접근이 가능합니다.
# 하지만 false 로 설정하면 아무나 브로커 서버에 접근이 가능하지 않으며
# password_file옵션으로 인증된 사용자를 제어해야 합니다.
allow_anonymous false
# 암호 파일을 사용하여 브로커에 대한 액세스를 제어합니다. 이 파일은
# mosquitto_passwd 유틸리티를 사용하여 생성됩니다. TLS 지원이 컴파일되지 않은 경우
# mosquitto (TLS 지원을 포함하는 것이 좋습니다)로
# 일반 텍스트 암호가 사용되는 경우 파일은 텍스트 파일이어야합니다.
# 다음과 같은 형식의 줄이 있습니다.
# 사용자 이름 : 암호
# 암호 (및 콜론)는 원한다면 생략 될 수 있지만,
# 보안을 거의 제공하지 않습니다.
# TLS 클라이언트 require_certificate 및 use_identity_as_username로 대체 인증이 가능한 옵션이 있습니다.
password_file password.txt


3. MQTT Server와 2개의 MQTT Client 접속 예 및 영상

mosquitto_conf 파일에서 수정한 부분이 있다면, MQTT Server를 열때 옵션 -c 를 사용하여 mosquitto_conf 파일 을 reload 해야해요.

MQTT Client 의 Client id를 User id와 같게끔 변경했기 때문에, 각각의 MQTT Client는 다른 User id를 사용하여 접속 해야해요

Dos에서 사용되는 Command Format

여기서 옵션 -h는 호스트 ip이므로 PC의 IP입니다.

#MQTT Server 
mosquitto -c mosquitto.conf -v 
#MQTT Client-1 
#Subscribe 
   mosquitto_sub -v -t /wiznet/module/testing -p 1883 -h 192.168.0.98 -u irina -P asd123^^ 
#Publish 
   mosquitto_pub -t /wiznet/module/tested -m {"msg":"tested","deviceId":"WIZnet_xxx","pubToDmTopic":"/wiznet/chip/tested"} -p 1883 -h 192.168.0.98 -u irina -P asd123^^ 
#MQTT Client-2 
#Subscribe 
   mosquitto_sub -v -t /wiznet/module/tested -p 1883 -h 192.168.0.98 -u qwerty -P 12345678 
#Publish 
   mosquitto_pub -t /wiznet/module/testing -m {"msg":"testing”,"mac":"00:00:00:aa:bb:cc","manufacture":"wiznet"} -p 1883 -h 192.168.0.98 -u qwerty -P 12345678

다음은 Dos 에서 MQTT 동작을 영상으로 만들어놨어요. 영상이 아무래도 더 쉬우니깐^^

Dos 순서대로, MQTT Server, MQTT Client -1, MQTT Client -2로 되어있으며, MQTT동작을 확인할 수 있다.

 

첨부파일은 포스팅한 내용은 문서화 한 버전입니다.

Mosquitto_Setting_Guide V1.0.pdf
0.35MB