문제상황

EC2 서버에 접속시, 인스턴스를 시작시 생성한 key pair 이용한다.

이 때 해당 key로 ssh 접속은 잘 되는데, putty로 접속하려고 하면 'server refused our key' 라는 메시지가 뜨면서 접속이 안된다.

(기본적인 연결 설정은 모두 다 했다. PuTTYgen을 이용하여 프라이빗 키 .pem을 ppk로 변경하고 키 파일경로 설정, 올바른 username 입력 등. 방법은 다음 링크 참고 : https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/putty.html)

 

그래도 연결이 안되고, 서버쪽 로그를 살펴보면 아래와 같은 로그가 남아있다.

userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
sshd[15855]: error: Received disconnect from xxx.xxx.xxxx port 51001:14: No supported authentication methods available [preauth]

 

해결방법

ssd_config를 수정 후, sshd를 재실행 해주니 putty 접속이 된다.

 

1. /etc/ssh/sshd_config를 아래와 같이 수정해준다.

# /etc/ssh/sshd_config
PubkeyAuthentication yes # 주석을 풀어, PubKeyAuthentication을 허용해준다.
PubkeyAcceptedKeyTypes=+ssh-rsa	# 이 내용을 추가해준다.

 

2. sshd를 재실행 한다. (ubuntu 에서의 명령어)

$ sudo systemctl restart sshd

 

3. putty로 다시 접속 해본다.

문제상황

리눅스에서 docker login을 하려고 하는데, 아래와 같은 메시지가 뜨면서 로그인이 안되는 경우가 있다.

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/auth": dial unix /var/run/docker.sock: connect: permission denied

 

해결방법

/var/run/docker.sock에 접근할 권한이 없어서 그렇다. sudo 명령어 사용해서 로그인 하면, 에러 없이 잘 된다.

# sudo docker login

# Username: 아이디 입력

# Password : 비밀번호 입력

로그인 된다.

AWS EC2 서버에 설치된 도커에, MariaDB를 설치해보도록 하겠다.

 

1. DB 이미지를 받아온다 (docker pull)

docker pull [이미지명:태그]

 

아래는 최신버전의 mariadb 이미지를 받아오는 명령이다.

# sudo docker pull mariadb

특정 버전을 받고 싶다면, [:버전태그] 를 추가해준다.

사용 가능한 버전은 https://hub.docker.com/ 여기서 확인 가능하다.

# sudo docker pull mariadb:10.8

 

2. DB 이미지를 컨테이너로 실행한다. (docker run)

docker run --name [컨테이너 이름] -e [환경변수=값] -d -p [포트:포트] -v [호스트 디렉토리:컨테이터 디렉토리] [이미지명:버전태그]

 

아래는 mariadb-container라는 컨테이너 이름으로 mariadb:latest 이미지를 실행하는 예이다.

# sudo docker run --name mariadb-container -e MYSQL_ROOT_PASSWORD=wordpress -d -p 3306:3306 -v /home/username/volume/mysql:/var/lib/mysql mariadb:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
※ 옵션 설명
--name
: 생성할 컨테이너 이름
-e : 환경변수 (password) 설정
-d : Dispatch mode (백그라운드에서 실행)
-p : 포트 연결 (외부포트: Docker 내부포트)
mariadb:latest : 컨테이너로 실행할 이미지 이름 
-v : 디렉토리 마운트. 호스트 디렉토리를 컨테이너의 디렉토리로 마운트
▶ docker에 DB를 설치하는 경우, 컨테이너를 삭제하면 데이터도 함께 날아가므로, 저장소는 꼭 외부 저장소(호스트 디렉토리)를 마운트하여 사용해야 한다
▶ 호스트 디렉토리는 EC2 서버에 존재하는 디렉토리이다. (원하는 경로를 마운트 해주면 된다.)
▶컨테이너 디렉토리 경로로 지정한 /var/lib/mysql 는 일반적으로 mysql 데이터파일이 저장되는 경로이다.
▶즉, 도커에 설치된 DB는 /var/lib/mysql 폴더에 데이터를 저장하는데, 이 폴더가 호스트 디렉토리에 마운트 되어 있으므로 실제 데이터가 호스트 디렉토리에 저장이 되게 됨. 따라서 컨테이너를 삭제 해도 호스트 디렉토리에 DB 데이터가 남아있을 수 있게 된다.
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci : 한글이 깨지지 않도록 설정하기 위한 인자값

 

3. 컨테이너에 접속하기 (docker exec)

docker exec -it [컨테이너명] bash

 

실행중인 mariadb-container에 접속하여, bash shell에서 커맨드를 실행할 수 있다.

#sudo docker exec -it mariadb-container bash
※ 옵션 설명
-it : -i interactive 옵션과 -t Pseudo-tty 옵션을 함께 준 것으로, bash shell에서 입/출력을 가능하게 해주는 옵션이다.

 

4. MysqlWorkbench로 DB 접속해보기

- hostname엔 도커가 실행되는 서버의 IP를 입력한다. (workbench와 같은 컴퓨터에서 실행되면 127.0.0.1로 그냥 두고, 다른 서버에서 실행중이라면 다른 서버의 공인 IP를 입력)

- Store in Vault ... 를 클릭해서 비밀번호 넣어주고

- Test Connection 해보면 정상 연결이 된다. [OK] 누르면 접속 됨

 

 

참고

http://jmlim.github.io/docker/2019/07/30/docker-mysql-setup/

문제상황

웹브라우저에서 AWS 관리 콘솔로 EC2에 연결하려고 할 때, 아래와 같은 메시지가 뜨며 연결이 안되는 경우가 있다.

원인

브라우저 기반 SSH 연결은 EC2 Instance Connect 서비스를 통해 사용자의 인스턴스를 리다이렉션하여 접속하게 된다고 한다.

따라서 내 PC의 IP 주소가 아닌, EC2 인스턴스가 위치하는 리전의 AWS IP 주소를 해당 EC2 인스턴스의 Security Group에 할당해 주어야 한다.

  • 한국 리전에서 사용하는 AWS IP : 13.209.1.56/29

해결방법

1. EC2 서비스 클릭 > 좌측 [네트워크 및 보안] 메뉴 하위의 [보안 그룹] 클릭 하여 보안그룹 메뉴로 이동

 

2. 접속하려는 EC2 인스턴스에 적용되는 보안그룹에 체크 > [인바운드 규칙] 클릭 > [인바운드 규칙 편집] 클릭

 

3. [규칙 추가] 클릭

4. 아래와 같이 인바운드 규칙 추가 후 [규칙 저장] 클릭

5. 다시 [연결] 클릭해서, 인스턴스에 연결해봄

6. 아래와 같이 연결됨

참고

https://support.skdt.co.kr/ko/support/solutions/articles/42000093546--ec2-aws-%EA%B4%80%EB%A6%AC-%EC%BD%98%EC%86%94-%EC%9B%B9%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EC%97%90%EC%84%9C-ec2%EC%97%90-%EC%97%B0%EA%B2%B0%ED%95%A0-%EC%88%98-%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4-

+ Recent posts