본문 바로가기
  • 포르쉐타고싶다
인포테인먼트 - development/linux

[linux] ec2 인스턴스 사용자의 ssh 보안 접속방법 두 가지 : 키페어, 비밀번호

by 지오ㄴl 2020. 3. 7.

프로그램의 서버 본체를 ec2 인스턴스에 올려 관리하고 있던 중

프로그램 일부분을 외주에게 맡길 부분이 있었고

외주가 맡은 부분을 이 인스턴스 내부에서 새로운 사용자를 부여하여 같이 관리를 해야했기 때문에

인스턴스 접속을 공유해야하는 일이 생겼다.

 

내가 ec2서버를 만든 후 부터 디폴트로 사용하던 사용자 이름을

ubuntu

접속주소를

ubuntu@ec2-12-345-678-90.ap-northeast-2.compute.amazonaws.com (가주소),

인스턴스 생성 시 새로 발급받은 key-pair이름을

ubuntukey.pem

이라고 하자.

 


<가정>

사용자이름 : ubuntu

키 파일 : ubuntukey.pem

접속주소 : ubuntu@ec2-12-345-678-90.ap-northeast-2.compute.amazonaws.com (가주소)

 

외주의 인스턴스 접속을 위해 

위의 내가 사용하던 사용자이름, 접속주소, 키페어를 그대로 전달한다면 

본래 내가 인스턴스에서 굴리고 있던 프로그램들의 보안에 큰 위험이 될 수 있다.

 

그래서 나는 인스턴스에 새로운 계정을 만들어 접속방법을 외주에게 알려주어야 하는데

문제는 이 외주 계정을

 


1) 어떻게 외주 자체로 안전하게 들어오게 하느냐

2) 내가 만들던 프로그램 본체에 접근하지 못하게 하느냐

두가지를 고려해야 했다.

 

이를 위한 두가지의 방법을 소개하고자 한다.

 

결론부터 말하면 그 방법은 두가지가 있다


1. 새로운 계정에 새로운 키페어를 만들어 접속주소와 함께 넘겨준다.

2. 새로운 계정에 비밀번호를 설정하여 접속주소와 함께 넘겨준다.

 

(나는 뭣도모르고 키페어와 비밀번호를 동시에 넘겨주어 보안에 큰 실수를 저지를 뻔했다. 뒤에 설명)

 

 

1. 새로운 계정에 새로운 키페어를 만들어 접속주소와 함께 넘겨준다.

(장)

- 키파일이 없으면 접속이 불가능하기 때문에 보안이 강하다

(단)

- 키파일을 생성하기까지 비교적 복잡하다(그리 복잡한 것도 아니다)

- 키파일의 위치를 잘 관리해야 한다. 없어질 경우 재생성 불가능

 

 

0) 기존에 내가 인스턴스에 접속하던대로 ubuntu로 접속


[pc]$ sudo ssh -i "ubuntukey.pem" ubuntu@ec2-12-345-678-90.ap-northeast-2.compute.amazonaws.com

 

1) 새로운 사용자 생성


[ubuntu]:~$ sudo adduser newuser

2) 새 사용자의 전용 키 생성


[ubuntu]:~$ sudo su newuser // 새로운 유저모드(newuser)로 전환

[newuser]:~$ ssh-keygen -t rsa  //newuser 전용 키페어 생성

3) 생성된 public키와 private키에 대한 조정

 

    2)에서 새로운 키페어를 생성하면

.ssh라는 경로가 생성되고

public키와 private키가 각각 생성된다


[newuser]:~$ cd .ssh

[newuser];~/.ssh$ ls
id_rsa  id_rsa.pub

 

   (1) id_rsa.pub : public키 => 이 위치에 고정되어 있고 key로그인 시 인증도구가 된다, authorized_key로 이름을 변경해주어야 한다.

   (2) id_rsa : private키 => 지금은 리눅스에 위치해 있지만 pc로 꺼내서 key로그인시 key로 사용할 것이다.


[newuser];~/.ssh$ ls
id_rsa  id_rsa.pub

[newuser]:~/.ssh$ mv id_rsa.pub authorized_keys  //(1)

[newuser]:~/.ssh$ ls
authorized_keys  id_rsa

 

4) (2)에서 말했던 것처럼

id_rsa => pc의 바탕화면으로 빼서 [newKey].pem으로 저장(그냥 텍스트 파일이어도 된다.)

 

<순서>

(1) id_rsa를 ubuntu계정 소유로 전환

(2) id_rsa를 ubuntu 디렉토리로 이동

(3) pc에서 ubuntu디렉토리로 이동되었던 id_rsa를 꺼내와 pc에 newkey.pem으로 저장

 

 

(1) id_rsa를 ubuntu계정 소유로 전환

- id_rsa는 newuser계정에서 ssh-keygen으로 만든것이기 때문에 권한이 소유자만 접근가능하고 소유자는 newuser로 되어있다

- 우리는 나중에 이 파일을 ubuntu(소유자x)의 이름으로 pc로 꺼내와야 하기 때문에 소유자를 ubuntu로 바꿔주어야 한다.


[newuser]:~/.ssh$ exit  // 계정 전환된것에서 다시 ubuntu계정으로 돌아온다

[ubuntu]:~$ sudo su  //계정을 root로 전환(id_rsa의 권한변경을 할 수 있는 존재)

[root]:~$ cd /home/newuser  //newuser 디렉토리로 이동

[root]:/home/newuser# ls -al  // 원래의 id_rsa소유자 확인
...
-rw-------  1 newuser newuser 1679 Mar  6 22:04 id_rsa  //id_rsa의 소유자로 newuser이 설정되어 있다
...

[root]:/home/newuser# chown ubuntu:ubuntu id_rsa  // id_rsa파일의 소유자를 ubuntu로 변경

[root]:/home/newuser# ls -al  //다시 id_rsa 소유자 확인
...
-rw-------  1 ubuntu ubuntu 1679 Mar  6 22:04 id_rsa  //id_rsa소유자가 ubuntu로 변경되었다
...

 

 

(2) id_rsa를 ubuntu 디렉토리로 이동

- id_rsa의 소유자로 ubuntu를 설정하면 이 파일을 pc꺼내오기 위한 준비는 모두 끝난 것이다.

- AMI로 생성된 ubuntu는 sudoer이기 때문에 newuser디렉토리에 있는 id_rsa에도 접근할 수 있어 파일의 디렉토리를 굳이 변경하지 않아도 되지만 그래도 ubuntu이름으로 꺼내오는거니 만큼 디렉토리도 ubuntu앞으로 이동해보자


[root]:/home/newuser# mv id_rsa /home/ubuntu  // /home/newuser에 원래 존재했던 id_rsa를 /home/ubuntu디렉토리로 이동

[root]:/home/newuser# cd /home/ubuntu

[root]:/home/ubuntu# ls  // /home/ubuntu: ubuntu디렉토리로 이동되었다.
id_rsa 

 

 

(3) pc에서 ubuntu디렉토리로 이동되었던 id_rsa를 꺼내와 pc에 newkey.pem으로 저장

 - pc에서 인스턴스에 ssh접속을 위한 key로 사용해야하기 때문에 pc로 꺼내와야한다.


[root]:/home/ubuntu# exit

[ubuntu]:~$ exit
[ubuntu]:~$ exit  // pc로 나갈때 까지 exit 반복

[pc] % cd Documents  // ubuntu key파일이 저장된 디렉토리로 이동 => Documents 폴더에 저장되어있다고 해보자

[pc] Documents % sudo scp -i "ubuntukey.pem" ubuntu@ec2-12-345-678-90.ap-northeast-2.compute.amazonaws.com:/home/ubuntu/id_rsa ./newkey.pem
// ubuntu 권한을 이용하여 접속한 다음 /home/ubuntu에 저장해두었던 id_rsa파일을 복사해와 pc에 newkey.pem으로 저장

[pc] Documents % ls  // newuser로 ssh접속을 위한 newkey.pem이름의 key파일이 생성되었다.
ubuntukey.pem  newkey.pem  

 

 

5) pc로 만들어와 생성된 키 newkey.pem을 이용해 newuser 사용자로 ssh 접속


[pc] Documents % sudo ssh -i "newkey.pem" newuser@ec2-12-345-678-90.ap-northeast-2.compute.amazonaws.com


[newuser]:~$  //newuser사용자로 인스턴스에 접속하였다.

 

 

2. 새로운 계정에 비밀번호를 부여하여 접속주소와 함께 넘겨준다.

(장)

- 생성이 굉장히 간단하다.

- 로그인도 키파일 없이 로그인 할 수 있어 간단하다

(단)

- 텍스트 비밀번호인 만큼 해킹당하거나 유출될 경우 보안이 뚫리기 쉽다

 

root =>

0) 기존에 내가 인스턴스에 접속하던대로 ubuntu로 접속


[pc]$ sudo ssh -i "ubuntukey.pem" ubuntu@ec2-12-345-678-90.ap-northeast-2.compute.amazonaws.com

 

1) 새로운 사용자 생성, 비밀번호 설정 - password만 설정

[ubuntu]:~$ sudo adduser newuser
Adding user `final' ...
Adding new group `final' (1004) ...
Adding new user `final' (1004) with group `final' ...
Creating home directory `/home/final' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:  // 비밀번호 설정
Retype new UNIX password:  // 비밀번호 재설정
passwd: password updated successfully
Changing the user information for final
Enter the new value, or press ENTER for the default
	Full Name []: 
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Is the information correct? [Y/n] y  // 맞다~

[ubuntu]:~$

2) 이제 바로 접속 가능하다..!


[ubuntu]:~$ exit

[pc] %

[pc] % sudo ssh -i "" newuser@ec2-54-180-117-56.ap-northeast-2.compute.amazonaws.com  // 비밀번호만을 사용해 접속을 하는것이기 때문에 key가 따로 필요없다
Password:
Warning: Identity file  not accessible: No such file or directory.
final@ec2-54-180-117-56.ap-northeast-2.compute.amazonaws.com's password:  //설정했던 패스워드만 입력하면 된다

[newuser]:~$  // 접속완료

 

본론은 끝났다

마지막으로 하고싶은 말은 

새로운 사용자 ssh 접속에 대해 구글링을 많이 해봤는데

위의 두가지 방법을 섞어서 설명하는 글도 많이 봤다. (나도 그랬다)

 

잘 섞이면 뭐 새로운 사용자에 대한 보안상의 문제를 피할 수 있겠지만

그렇지 않은 경우 위험에 노출될 수 있다.

 

예를 들어 위에서 AMI로 생성된 사용자인 ubuntu에 대해 생성된 키인 ubuntukey.pem은 새로운 사용자와 전혀 관련이 없고

절대 ubuntukey.pem을 같이 넘겨주어서는 안된다.


sudo ssh -i "newkey.pem" newuser@ec2-12-345-678-90.ap-northeast-2.compute.amazonaws.com -v

접속 명령어 마지막에 -v를 붙이면 접속과정을 debugging할 수 있는데 보면


debug1: Authentications that can continue: publickey,password

라고 말한다. 즉

 

newuser가 ssh 접속할 때 publickey 혹은 password로 동등하게 접속이 가능하다는 말이다.

따라서 password를 안다면 저 "newkey.pem"을 검사할 필요가 없기 때문에 "" 같이 공백으로 둬도 된다는 뜻이다.

혹시 저 문장을 잘못 해석해 비밀번호 접속에도 ubuntukey.pem이 필요하다고 생각하면 안된다.

 

그렇게 된다면

내가 ec2 인스턴스 첫 생성시 AMI로 ubuntu를 선택하였는데 자동으로 owner 사용자이름이 ubuntu로 설정되는 것은 공통적이기 때문에

다른사용자가 그대로 ubuntu라는 사용자이름을 예측할 수 있고

사용자 이름, 키파일, 접속주소를 그대로 사용하여

sudo ssh -i "ubuntukey.pem" ubuntu@접속주소

를 통해 그대로 프로그램의 본체가 뚫리게 되는 상황이 마련된다.

 

혹시나 다른사용자에게 접속권한을 부여할 때 저 ubuntukey.pem을 같이 넘겨줄 생각을 하는 사람이 생기지 않았으면 바란다.

 

 

 

반응형

댓글