Ansible Test를 위한 SSH 접속 환경 구축

Ansible Architecture for Test v1.0

이 포스트는 Ansible Skill Enhancement Project의 일환으로 진행됩니다. 각 단계를 살펴보기 위해서는 위 링크를 참조해주세요.

Ansible Architecture for Test v1.0

위 그림은 일전에 소개해드렸던 간략한 아키텍처입니다.
저는 GCP에서 구축한 이 환경으로 테스트를 해보려고 합니다.
Ansible을 설치하기 전에 우선 각 서버에 접속하기 쉽게 만들어보려고 합니다.
저는 살짝 다르게 구성을 했지만, 여기서 소개할 방식은 Controller에서 각 클라이언트에 원격접속이 가능하게끔 하는 것입니다.

SSH Key 생성

[flature@Ansible-Controller ~]$ ssh-keygen -t rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/flature/.ssh/id_rsa.
Your public key has been saved in /home/flature/.ssh/id_rsa.pub.
The key fingerprint is:
...

위 커맨드는 ssh에 사용되는 키를 생성해주는 명령어입니다.
-t 옵션은 암호화 방식에 대한 선택을 할 수 있게 해줍니다.
그 이후 Enter passphrase : 와 같이 물어보는 것들이 나오는데, 저는 가뿐히 엔터치고 넘어갔습니다.
여기서 중요한 점은 root 권한으로 실행하지 않았다는 점입니다.
현재는 /home/유저폴더 에 키가 생성이 되었지만 root에서 같은 명령을 실행하게 되면 디렉토리가 달라진다는 점 참고하시면 되겠습니다.

[flature@Ansible-Controller ~]$ cd /home/flature/.ssh/
[flature@Ansible-Controller .ssh]$ ls -al
...
-rw-------. 1 flature flature  411 Apr 17 22:28 authorized_keys
-rw-------. 1 flature flature 1679 Apr 17 22:42 id_rsa
-rw-r--r--. 1 flature flature  405 Apr 17 22:42 id_rsa.pub
...

여기 나와 있는대로 디렉토리를 이동하여 내부 리스트를 살펴보면 위와 같이 파일들이 나와있습니다.
저의 경우에는 GCP에서 VM을 생성해서 그런지 이미 authorized_keys 파일이 있네요.
저와 다른 환경에서 만드신다면 상이할 수 있습니다.

SSH Public Key Client서버로 보내기

이제 Controller서버에서 생성한 Key를 Client 서버로 보낸 후, 같은 경로에 있는 authorized_keys 파일에 내용을 추가해주면 됩니다.
이 과정은 다양한 방법이 있는데 우선 리스트로 소개를 먼저 해드리자면 아래와 같습니다.

  • Key 내용만 복사하여 붙여넣기
  • ssh-copy-id 활용하여 원격 서버로 복사하기
  • Google Storage(버킷) 활용하기

위에 나열해드린 방법 외에도 여러 방법이 존재하겠지만, 지금 막 떠오르는 3가지만 적어보았습니다.
GCP VM Instance의 경우에는 (아직 별로 궁금하지 않아 알아보지 않았습니다만) 같은 리전, 같은 영역에 생성되어 같은 서브넷 안에 존재하는 VM 끼리 ssh-copy-id 기능이 권한 문제로 수행되지 않았습니다.

제가 이 글에서 소개해드릴 방법은 버킷을 활용한 방법입니다.

Google Cloud Storage(버킷)을 활용한 SSH Key 복사하기

Google Cloud Storage for Free

위 캡쳐 사진은 GCP 무료등급 안내 페이지에서 가져왔습니다. 기본적으로 저희가 위 기준만 맞춰서 생성만 해준다면, 이 과정 만으로는 과금이 되지 않으니 안심하고 따라하셔도 되겠습니다.

그럼 생성한 버킷으로 public key를 복사할 차례입니다.
복사하기 전에 체크해야할 사항이 있습니다.
VM을 생성할때 API에 대해 권한을 어떻게 주었느냐에 따라 퍼미션 문제가 발생할 수 있습니다.
Cloud API 엑세스 범위에서 저장소 부분에 쓰기권한이 부여가 되어 있는지 체크를 해주시기 바랍니다.
그렇지 않으면 버킷에 파일을 옮길 수 없을 수도 있습니다.

[flature@Ansible-Controller .ssh]$ gsutil cp ./id_rsa.pub gs://thinkgbucket
...
Operation completed over 1 objects/405.0 B.

명령어는 일반 cp 쓰는 것 같이 쓰면 됩니다.
VM에서 버킷을 사용할 때에는 ‘gs://[버킷이름]’처럼 활용하면 됩니다.
그리고 아래와 같이 Operation Completed가 뜬다면 정상적으로 복사가 된 것으로 보여집니다. 그럼 버킷 페이지에서 확인해보면 됩니다.

Bucket List

저의 경우에는 잘 저장이 되었습니다. 더 확실하게 확인해보고 싶으신 분은 크기도 맞는지 보시면 됩니다.

그럼 이제 Client VM에 접속하여 버킷에 저장되어 있는 파일을 끌어와야 합니다.

[flature@Ansible-Client-1 .ssh]$ gsutil cp gs://thinkgbucket/id_rsa.pub ./

복사할 때 어차피 이동시켜야 하니 처음부터 .ssh 경로에서 복사해주시는 것이 좋습니다.
그 후에 기존에 authorized_keys가 없다면 이름만 저걸로 바꿔주시면 되는데, 기존에 존재한다면 id_rsa.pub 파일의 내용을 authorized_keys 내용 밑에 추가해주시면 됩니다.

그런 후에 다시 controller에 접속하여 접속 테스트를 해봅니다.

[flature@Ansible-Controller ~]$ ssh jungwoo5394@11.11.11.12
The authenticity of host '11.11.11.12 (11.11.11.12)' can't be established.
...
Are you sure you want to continue connecting (yes/no)? yes
[flature@Ansible-Client-1 ~]$

처음 접속시에는 저렇게 접속에 대해 다시 물어봅니다. yes를 입력하여 접속해줍니다. 그럼 접속이 되는 것을 확인할 수 있습니다. 이 과정에서 SSH Key로 접속을 하기 때문에 별도의 키를 묻지 않습니다. 이렇게 하면 우선 원격으로 접속할 환경은 구축이 다 되었습니다. 이후 포스트에서는 Ansible 설치 방법과 간단하게 명령어들을 쳐보도록 하겠습니다.

Leave a Reply