0부터 시작하는 Linux 공부 - SSH 연결

Jaehong Lee·2022년 7월 20일
1
post-thumbnail
post-custom-banner

시나리오. centOS 7 이라는 인스턴스를 생성했다. 주소는 211.183.3.201 이고, EC2 USER가 만들어져 있으며, 해당 계정은 WHEEL 그룹에 포함되어 있어, SUDO를 통해 필요할 때 마다 root의 권한을 불러와서 실행할 수 있다. public key는 인스턴스에 위치하고, private key는 윈도우에서 보관하며 접속할 계획이다

1. ip 점검

  • ip를 확인한다
  • ping을 통해 외부와의 통신을 점검한다
    • 만약 ip가 있는데도, 통신이 잘 안된다면
    1. ifdown ens32 ; ifup ens32 를 통해 인터페이스를 껏다 켜본다
    2. 이래도 안되면, 가상 머신 네트워크 문제일 수 있으므로, 네트워크 설정에서 해당 vmnet을 껏다 켜본다
    • 이는 v switch를 껏다 키면, 하이퍼 바이저에서 물리 자원의 nic를 통해 다시 v switch를 구성해주기에, 문제가 해결 가능하다. 이래도 안되면 ip를 잘못 설정한 것 이다

2. SSH 동작 확인

  • sshd 를 restart하고, status로 상태를 확인하면, 잘 실행되는 것을 확인 가능 하다

3. SSH 를 위한 설정 파일 확인하기

  • 모든 시스템은 구성 파일이 있으며, daemon이 해당 구성 파일을 읽고 서비스를 구성한다
  • sshd_config 파일은 외부에서 내부로 접속하게 해주는 서비스에 대한 구성 파일이다
  • 접근 포트 번호 / root 로그인 허용 / 클라이언트 인증 방식 과 같은 다양한 설정들이 있다
  • public key 인증 방식을 허용했을 때, 해당 public key를 .ssh 디렉토리 안의 authorized_keys에 저장하겠다고 설정한 것 이다. 따라서 사용자 인증시 public key를 해당 파일에서 찾는다

4. 접속을 위한 계정 생성

  • ec2-user라는 계정을 생성하고, password를 test123으로 설정한다
  • 해당 계정으로 접속하여, 홈 디렉토리로 이동한다

5. Key-Pair 만들기

  • Key-Pair를 만들면 .ssh 폴더가 생긴다. 해당 폴더에 key가 잘 생성되었다. pem 파일은 개인 키 이고, pub 파일은 공개 키 이다. 이 공개 키는 authorized_keys 에 넣어야 한다
  • cat을 통해 public key 내용의 출력을 보내서 authorized_keys 파일을 생성함과 동시에 public key 키의 내용을 넣어주어 public key 를 authorized_keys에 저장했다
  • head를 통해 파일 내용을 확인하자
  • cat 0720.pem 을 통해 안에 Key 를 복사해서, 윈도우 상의 메모장을 실행하여 붙여넣기 해준다. 메모장은 모든 파일로 pem 파일을 만들어서 저장해준다

6. ec2-user 가 sudo 명령어를 사용할 수 있게 하기

  • ec2-user 를 wheel 그룹에 넣어 줘야 한다
  • sudoers 파일을 편집기로 열어주자
    • 107 번째 줄은 wheel 그룹 user 들은 root 권한 사용 가능하나 sudo 명령시 패스워드를 요구 받는다는 설정이다
    • 110 번째 줄은 패스워드를 요구 받지 않는 설정이다

  • a는 기존 그룹을 유지하며, 추가로 그룹에 포함되게 한다. -G 옵션과 함께 쓰여야 한다
  • 소문자 g는 gid를 변경시켜, 그룹을 변경시킨다
  • 대문자 G는 gid가 바뀌지 않으며, 추가로 다른 그룹에 포함되게 한다
  • 위 명령어를 통해 ec2-user를 wheel 그룹에 포함시킨다
    • 이로써 wheel 그룹은 sudo 명령을 하여 루트의 권한으로 명령 실행이 가능하되, password는 요구하지 않으며, ec2-user는 wheel 그룹에 포함된다

7. putty 로 원격 접속

  • putty 에서는 pem 파일을 ppk 파일로 변환해야 사용 가능 하다
  • puttygen을 실행해서 conversions/import key를 통해 pem 파일을 가져와서 save private key 를 눌러서 ppk 파일로 저장해준다
  • 이제 putty를 실행해주자
  • 다음과 같이 설정. group 14 와 group 1 을 순서에 맞춰 올려준다
  • key를 불러온다
  • 이제 Ip를 입력하고, Open을 눌러주면 된다
  • 허나, 현재 key 인증이 안된다
  • ec2-user의 authorized_keys 의 권한을 변경하여 public key 와 권한이 동일하게 해준다. 644로 rw-r--r--로 변경한다. ssh 접속시 서버에서 해당 key 파일에 대해 read 할 수 있어야되기 때문이다

    • 추가. 위의 root가 아니라 ec2-user 거를 조정해야 된다

  • 다음과 같이 접속해서 명령 실행이 가능하다
    • 만약 안된다면, key를 gedit 창을 줄여서 복사해보자. 너무 늘려서 복사하면 공백이 들어가서 key 인증에 실패할 수 도 있다
    • ls -l은 ll로도 사용 가능
    • sshd_config에서 password 인증을 주석 처리하고, root login 허용을 주석 해제 하자

8. SSH 연결 과정

  1. 서버 인증 : 클라이언트가 서버를 인증
  2. 사용자 인증 : 서버가 정상적인 사용자인지 여부를 확인
    • 세션키의 DH는 위에서 설정한 Diffle-Hellman group 을 사용한다
    • 세션 형성 후 데이터 전송할 때는 데이터를 세션키로 암호화해서 보내고, 데이터를 받으면 복호화 한다
    • 우리는 실습에서 서버에서 key-pair를 만들었지만, 실무에서는 client에서 만드는게 좋다

서버 인증 - 클라이언트에서 진행

  1. 클라이언트가 서버에 ssh 요청을 보내면, 서버는 가지고 있던 서버 인증용 공개 키를 클라이언트에게 보낸다
  2. 클라이언트는 받은 공개 키를 known_hosts 에 저장
  3. 클라이언트가 다시 접속 요청을 보내면, 서버가 또 공개 키를 보낸다
  4. 클라이언트가 known_hosts에 공개 키를 가지고 있으면, 둘이 비교하여 동일하면 서버 인증을 마치고 세션 키가 생성된다

사용자 인증 - 서버에서 진행

  1. 클라이언트에서 키페어를 만들어 공개 키는 서버에게 보내 authorized_keys에 저장하고, 사설 키는 가지고 있는다 ( 실무에서는 관리 서버에서 만들어 뿌려주고, 관리 서버는 스스로 가지고 있는 사설 키를 제거한다 )
  2. 클라이언트가 자신의 키 페어 id를 서버에 요청한다
  3. 서버가 자신의 authorized_keys에 키 페어 id를 탐색한다. 각 공개 키는 끝에 @username과 같이 구분된다. 이를 찾아서, 만약 키 페어 id에 해당하는 공개 키가 있다면, 난수를 생성한다
  4. 난수를 공개 키로 암호화해서 보낸다. 클라이언트는 해당 암호화 데이터를 사설 키로 복호화한다
  5. 복호화해서 나온 난수를 md5 ( 해시 함수 ) 에 넣어 문자열을 출력한다 . 이 문자열을 서버에 보내, 서버에서도 난수를 md5에 넣어 나온 문자열과 비교하여 무결성 검사를 한다
  6. 무결성 검사에 통과하면 세션이 형성되고, 이 세션 안에서 데이터를 세션키로 암호화해서 전송한다

9. Data Center 에서 원격지 연결을 위해 해야할 것

  1. 템플릿 이미지를 준비한다
  2. 이미지 수정하기
      1. public key 인증 활성화
      1. 사용할 계정 미리 만들어 두기
  3. key-pair 만들기 ( 이미지에서 꼭 만들지 않아도 된다. bastion host [ 관리용 서버 ] 에서 만드는 것이 좋다 )
  4. public key 를 기본 이미지에 추가적으로 부착한다 ( virt-customize -a 이미지파일 --upload mykey.pem.pub:/계정 홈 디렉토리/.ssh/authorized_keys ) 를 통해 public key를 이미지의 authorized_keys에 넣어준다
  5. private key 는 클라이언트에게 보여준다. 혹은 다운로드 해준다. 이후, private key 는 가지고 있으면 안되므로, 삭제한다
  6. 템플릿 이미지를 인스턴스로 실행한다
  7. 생성된 인스턴스의 정보는 DB에 저장한다. 이때, 인스턴스의 Ip / cpu / ram / Host zone 등의 정보를 저장한다
  8. 사용자는 관리 페이지에서 Ip를 확인하고 접속한다 ( ' ssh -i mykey.pem Ip 주소 ' 혹은 ppk 파일을 putty 와 연결하여 접속 )
profile
멋진 엔지니어가 될 때까지
post-custom-banner

0개의 댓글