현재 나의 Windows 11에 WSL로 Ubuntu가 설치되어 있다.
그리고 다음과 같은 시나리오를 가정하고 있다.
어느 서버에 설치된 리눅스 환경의 정보가 주어졌을때 외부 환경에서 해당 서버에 접속하여 데이터베이스를 설치하고, 내 윈도우 환경에서 해당 데이터베이스에 직접 접속 하고 싶다.
즉, 다음과 같이 서버의 데이테 베이스에 접속 하는 두가지 케이스에서 2번의 경우를 가정하고 있다.
- 리모트에서 서버로 접속 후 데이터 베이스에 접속
- 리모트에서 서버의 데이터 베이스로 바로 접속
위를 위해 Ubuntu 환경과 내 윈도우 환경에서 해줘야하는 작업들은 다음과 같다.
openssh-server 설치
우선 설치해둔 우분투에 접속하고 openssh-server를 설치 해 준다.
sudo apt install openssh-server
SSH 는 Secure Shell의 약자로 컴퓨터(윈도우)와 컴퓨터(리눅스)가 서로 통신을 할 때 보안적으로 더 안전하게 통신을 하기 위해 사용하는 프로토콜이다.
SSH를 사용하면 네트워크 상의 다른 컴퓨터에 원격 접속 하여, 제어 및 데이터 전송울 할 수 있다.
SSH (Secure SHell) 란? 쉽게 이해해보자.
"Secure Shell Protocol" 즉 네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜입니다. SSH
hstory0208.tistory.com
net-tools 설치( ip 주소 확인)
그리고 나중에 윈도우에서 직접 접속하기 위해 설치된 우분투의 ip 주소를 확인해 둔다.
sudo apt install net-tools
ifconfig
MariaDB 설치
그리고 주 목적인 데이터베이스 (MariaDB)를 설치 해 주자.
서비스 시작
service mariadb start
시스템 시작시 MariaDB 활성화
sudo systemctl enable mariadb
MariaDB 보안 스크립트 설정
mariadb에 접속하기 전 몇가지 설정과 root 계정의 비밀번호를 설정해줘야 한다.
sudo mysql_secure_installation
여기서 몇가지 설정에 대해 선택 및 입력을 해줘야 하는데
- Switch to unix_socket authentication [Y/n]
→ 유닉스 소켓이라는 인증 방식으로 변경 할 것인지 ? Y
이 설정을 Y로 해주면 리눅스 root user = maria DB root user 가 된다.
자세한 내용은 아래를 참조.
https://www.nemonein.xyz/2019/07/2254/ - Change the root password? [Y/n]
→root password를 변경 할 것인지? Y
이후 password를 입력해 주자. - Remove anonymous users? [Y/n]
→ 익명 사용자를 제거할 것인지? Y - Disallow root login remotely [Y]
→ 외부 환경(remote)에서 root로 로그인을 못하게 할 것인지? N
테스트를 위해 자주 접속을 해야 하므로 N을 해주었다. 실제 서비스를 위한 DB는 Y를 해주어야 할 듯 하다. - Remove test database and access to it? [Y/n]
→ 테스트 데이터베이스 삭제 할 것인지? N - Reload privilege tables now? [Y/n]
→ 권한 table 리로드 할 것인지? Y
설정을 완료하면 다음과 같은 메시지가 뜨며 접속이 가능해 진다.
리눅스에서 MariaDB 접속
나는 유닉스 소켓 인증 방식을 Y를 해주었고 현재 root 유저이므로 sudo mysql로 바로 접속이 가능하다.
sudo mysql
간단히 설치된 mariadb의 버전을 확인해 보자.
select version();
db 목록도 확인이 가능하다.
show databases;
이상으로 서두에서 가정했던 시나리오 중 1번, 즉 리모트에서 서버로 접속한 후 데이터베이스에 접속까지 해보았다.
다음으로 Windows 11의 MariaDB 툴을 이용해 리눅스 서버의 MariaDB로 직접 접속을 해보자.
윈도우에서 직접 리눅스 서버의 DB로 접속
검은색 프롬프트는 윈도우, 자주색 프롬프트는 우분투이다.
먼저 내 윈도우에는 이미 MariaDB가 설치되어 있고 설치된 MariaDB의 bin 폴더로 이동하자.
위에서 찾아놓은 리눅스 서버의 ip 주소를 이용하여 mysql 접속 명령어를 입력해 보아도 접속이 불가능하다.
이는 MariaDB 패키지는 보안상의 이유로 127.0.0.1에서만 접근하도록 허용한다고 하는데, 이를 모든 IP에서 접근이 가능하도록 바꾸어 주어야한다.
참고로 아래 명령어로 모든 네트워크 연결과 소켓 정보를 IP주소 및 포트 번호로 보여준다
netstat -anpt
MariaDB가 모든 IP에서 접근이 가능하도록 바꾸어 주려면 my.cnf라는 파일의 설정을 바꿔 주어야 하는데, 보통 /etc/mysql 디렉토리에 존재한다. 이를 vim편집기로 열어 가장 하단에 아래의 설정을 추가해준다.
[mysqld]
bind-address=0.0.0.0
그 이후 MariaDB를 재시작시켜주고 다시 확인해보면 3306포트를 사용하는 mariadb의 로컬주소가 0.0.0.0으로 바뀌어 있는것을 확인할 수 있다.
이제 다시 윈도우로 돌아와 접속을 시도해보자.
호스트가 접속을 허용하지 않는다는 메시지가 뜨며 접속에 실패했다.
이는 root에 대하여 host가 localhost 즉 , 자기 자신에게만 접속을 허가하고 있기 때문이다.
따라서 이를 모든 ip에 대해서 접근이 가능하도록 바꿔주던가, 동일한 권한을 가진 모든 ip에서 접근이 가능한 유저를 만들어 주어야 한다.
다시 우분투로 돌아와, MariaDB에 접속하여 유저를 확인해 보면 역시 root에 대하여 localhost만 접근이 가능함을 알 수 있다. 나는 모든 ip에서 접근이 가능한 root 유저를 하나더 추가해 주도록 하겠다.
아래 명령어를 통해 root 유저를 추가하고, 모든 데이터베이스에 대해 권한을 주었다. 그리고 권한 설정을 다시 불러와 바로 적용되게 해주었다.
create user 'root'@'%' identified by '비밀번호';
grant all privileges on *.* to 'root'@'%' identified by '비밀번호';
flush privileges;
유저가 추가되었음을 확인하고 다시 왼도우로 돌아가 동일한 방법으로 접속을 해보면 정상적으로 접속이 됨을 알 수 있다.
이제 원격에서도 DB 접속이 가능하므로 개발 및 테스트 목적으로 활용해보자.
'OS > Linux' 카테고리의 다른 글
[Linux] Windows11에 WSL(Ubuntu) 설치 (0) | 2024.02.01 |
---|