InfoGrab DocsInfoGrab Docs

Ansible

요약

Ansible은 기본적으로 OpenSSH 클라이언트를 사용합니다. 이 가이드에서는 OpenSSH 클라이언트가 Teleport 프록시와 함께 작동하도록 설정하고 샘플 ansible 플레이북을 실행하는 방법을 다룹니다. 이 가이드에서 설명하는 설정에서는 Teleport가 발급한 SSH 인증서를 사용하여 Teleport가 보호하는 서버에 연결하는 OpenSSH 설정을 생성합니다.

Ansible은 기본적으로 OpenSSH 클라이언트를 사용합니다. Teleport는 SSH 프로토콜을 지원하며 SSH 점프호스트로 작동합니다.

이 가이드에서는 OpenSSH 클라이언트가 Teleport 프록시와 함께 작동하도록 설정하고 샘플 ansible 플레이북을 실행하는 방법을 다룹니다.

동작 방식#

이 가이드에서 설명하는 설정에서는 Teleport가 발급한 SSH 인증서를 사용하여 Teleport가 보호하는 서버에 연결하는 OpenSSH 설정을 생성합니다. 그런 다음 이 OpenSSH 설정을 Teleport가 보호하는 서버의 인벤토리와 함께 Ansible 호스트에 제공합니다. Ansible은 이 OpenSSH 설정을 사용하여 Teleport가 발급한 자격 증명을 제시함으로써 서버를 관리합니다.

사전 요구사항#

  • 실행 중인 Teleport 클러스터. Teleport를 시작하려면 무료 체험판에 가입하거나 데모 환경을 구성하세요.

  • tctl and tsh clients.

    Installing `tctl` and `tsh` clients
    1. Teleport 클러스터의 버전을 확인합니다. tctl and tsh clients는 Teleport 클러스터 버전보다 최대 한 개의 메이저 버전까지만 뒤처질 수 있습니다. Proxy Service의 /v1/webapi/find로 GET 요청을 보내고 JSON 쿼리 도구를 사용하여 클러스터 버전을 확인합니다. teleport.example.com:443를 Teleport Proxy Service의 웹 주소로 바꿉니다:

      $ TELEPORT_DOMAIN=teleport.example.com:443
      $ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')"
      
    2. 사용 중인 플랫폼에 대한 지침에 따라 tctl and tsh clients를 설치합니다:

Mac

     `tctl` and `tsh` clients가 포함된, 서명된 Teleport macOS .pkg 설치 프로그램을 다운로드합니다:
 
     ```code
     $ curl -O https://cdn.teleport.dev/teleport-${TELEPORT_VERSION?}.pkg
     ```

     Finder에서 `pkg` 파일을 더블 클릭하여 설치를 시작합니다.
 
     
Warning
       Homebrew를 사용하여 Teleport를 설치하는 것은 지원되지 않습니다. Homebrew의
       Teleport 패키지는 Teleport에서 유지 관리하지 않으므로 신뢰성이나 보안을
       보장할 수 없습니다.
     

Windows - Powershell

     ```code
     $ curl.exe -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-windows-amd64-bin.zip
     # Unzip the archive and move the `tctl` and `tsh` clients to your %PATH%
     # NOTE: Do not place the `tctl` and `tsh` clients in the System32 directory, as this can cause issues when using WinSCP.
     # Use %SystemRoot% (C:\Windows) or %USERPROFILE% (C:\Users\<username>) instead.
     ```
 
   

 
   

Linux

     Linux 설치판의 모든 Teleport 바이너리에는 `tctl` and `tsh` clients가 포함되어 있습니다.  RPM/DEB
     패키지 및 i386/ARM/ARM64용 다운로드를 포함한 더 많은 옵션은
     [설치 페이지](../installation/installation.mdx)를 참조하세요.
 
     ```code
     $ curl -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
     $ tar -xzf teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
     $ cd teleport
     $ sudo ./install
     # Teleport binaries have been copied to /usr/local/bin
     ```
   

 
  • ssh openssh 도구
  • ansible >= [ansible.min_version]
  • JSON 출력을 처리하기 위한 선택적 도구 jq

1단계/3단계. 로그인 및 SSH 설정#

tsh로 Teleport에 로그인합니다.

$ tsh login --proxy=teleport.example.com

tsh config 단축 명령을 사용하여 openssh 설정을 생성합니다.

$ tsh config > ssh.cfg
Tip

바로 작동하지 않는 부분이 있다면 ssh.cfg에서 사용되는 일치 패턴을 편집할 수 있습니다.

2단계/3단계. Ansible 설정#

생성된 모든 파일을 모아둘 폴더 ansible을 생성합니다.

$ mkdir -p ansible
# 이전 단계의 openssh 설정을 ansible 디렉터리로 복사합니다
$ cp ssh.cfg ansible/
$ cd ansible

ansible.cfg 파일을 생성합니다.

[defaults]
host_key_checking = True
inventory=./hosts
remote_tmp=/tmp

[ssh_connection]
scp_if_ssh = True
ssh_args = -F ./ssh.cfg

인벤토리 파일 hosts를 직접 생성하거나 아래 스크립트를 사용하여 환경으로부터 생성할 수 있습니다. 클러스터 이름(예: teleport.example.com 또는 Teleport Enterprise Cloud의 경우 mytenant.teleport.sh 형식)을 설정하면 이 스크립트가 openssh 설정과 일치하는 호스트 이름을 생성합니다.

$ tsh ls --format=json | jq '.[].spec.hostname + ".teleport.example.com"' > hosts

3단계/3단계. 플레이북 실행#

마지막으로 간단한 ansible 플레이북 playbook.yaml을 생성해 보겠습니다.

아래 플레이북은 모든 호스트에서 hostname을 실행합니다. remote_user 매개변수를 대상 호스트에서 작동하고 Teleport에서 허용하는 유효한 SSH 사용자 이름으로 설정해야 합니다.

- hosts: all
  remote_user: ubuntu
  tasks:
    - name: "hostname"
      command: "hostname"

ansible 폴더에서 ansible 플레이북을 실행합니다.

$ ansible-playbook playbook.yaml

# PLAY [all] *****************************************************************************************************************************************
# TASK [Gathering Facts] *****************************************************************************************************************************
#
# ok: [terminal]
#
# TASK [hostname] ************************************************************************************************************************************
# changed: [terminal]
#
# PLAY RECAP *****************************************************************************************************************************************
# terminal                   : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

이제 모든 설정이 완료되었습니다. 이제 수명이 짧은 SSH 인증서를 사용하고 있으며 Teleport는 감사 로그에 모든 ansible 명령을 기록할 수 있습니다.

문제 해결#

Ansible이 연결할 수 없는 경우 다음과 같은 오류가 표시될 수 있습니다.

example.host | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname example.host: Name or service not known",
    "unreachable": true
}

ssh.cfg에서 인벤토리 호스트와 일치하는 패턴을 확인하고 조정할 수 있습니다.

ssh.cfg를 사용하여 verbose 모드로 SSH 연결을 시도해 오류를 확인해 보세요.

$ ssh -vvv -F ./ssh.cfg root@example.host

ssh가 작동한다면 verbose 모드를 켜고 플레이북을 실행해 보세요.

$ ansible-playbook -vvvv playbook.yaml

호스트 이름에 대문자(예: MYHOSTNAME)가 포함되어 있는 경우, Teleport의 내부 호스트 이름 일치는 기본적으로 대소문자를 구분하므로 이로 인해 이 오류가 발생할 수도 있다는 점에 유의하세요.

이 경우라면 Teleport 관리자에게 클러스터 수준에서 대소문자를 구분하지 않는 라우팅을 활성화하도록 요청하여 이 문제를 우회할 수 있습니다. 관리자는 다음 지침에 따라 대소문자를 구분하지 않는 라우팅을 활성화할 수 있습니다.

Teleport auth_service를 실행하는 모든 서버에서 /etc/teleport.yaml 설정 파일을 편집한 다음 각 서버에서 Teleport를 재시작하세요.

auth_service:
  case_insensitive_routing: true

tctl edit cluster_networking_config를 실행하여 다음 사양을 추가한 다음 저장하고 종료하세요.

spec:
  case_insensitive_routing: true

Ansible

Teleport v18.9
원문 보기
요약

Ansible은 기본적으로 OpenSSH 클라이언트를 사용합니다. 이 가이드에서는 OpenSSH 클라이언트가 Teleport 프록시와 함께 작동하도록 설정하고 샘플 ansible 플레이북을 실행하는 방법을 다룹니다. 이 가이드에서 설명하는 설정에서는 Teleport가 발급한 SSH 인증서를 사용하여 Teleport가 보호하는 서버에 연결하는 OpenSSH 설정을 생성합니다.

Ansible은 기본적으로 OpenSSH 클라이언트를 사용합니다. Teleport는 SSH 프로토콜을 지원하며 SSH 점프호스트로 작동합니다.

이 가이드에서는 OpenSSH 클라이언트가 Teleport 프록시와 함께 작동하도록 설정하고 샘플 ansible 플레이북을 실행하는 방법을 다룹니다.

동작 방식#

이 가이드에서 설명하는 설정에서는 Teleport가 발급한 SSH 인증서를 사용하여 Teleport가 보호하는 서버에 연결하는 OpenSSH 설정을 생성합니다. 그런 다음 이 OpenSSH 설정을 Teleport가 보호하는 서버의 인벤토리와 함께 Ansible 호스트에 제공합니다. Ansible은 이 OpenSSH 설정을 사용하여 Teleport가 발급한 자격 증명을 제시함으로써 서버를 관리합니다.

사전 요구사항#

  • 실행 중인 Teleport 클러스터. Teleport를 시작하려면 무료 체험판에 가입하거나 데모 환경을 구성하세요.

  • tctl and tsh clients.

    Installing `tctl` and `tsh` clients
    1. Teleport 클러스터의 버전을 확인합니다. tctl and tsh clients는 Teleport 클러스터 버전보다 최대 한 개의 메이저 버전까지만 뒤처질 수 있습니다. Proxy Service의 /v1/webapi/find로 GET 요청을 보내고 JSON 쿼리 도구를 사용하여 클러스터 버전을 확인합니다. teleport.example.com:443를 Teleport Proxy Service의 웹 주소로 바꿉니다:

      $ TELEPORT_DOMAIN=teleport.example.com:443
      $ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')"
      
    2. 사용 중인 플랫폼에 대한 지침에 따라 tctl and tsh clients를 설치합니다:

Mac

     `tctl` and `tsh` clients가 포함된, 서명된 Teleport macOS .pkg 설치 프로그램을 다운로드합니다:
 
     ```code
     $ curl -O https://cdn.teleport.dev/teleport-${TELEPORT_VERSION?}.pkg
     ```

     Finder에서 `pkg` 파일을 더블 클릭하여 설치를 시작합니다.
 
     
Warning
       Homebrew를 사용하여 Teleport를 설치하는 것은 지원되지 않습니다. Homebrew의
       Teleport 패키지는 Teleport에서 유지 관리하지 않으므로 신뢰성이나 보안을
       보장할 수 없습니다.
     

Windows - Powershell

     ```code
     $ curl.exe -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-windows-amd64-bin.zip
     # Unzip the archive and move the `tctl` and `tsh` clients to your %PATH%
     # NOTE: Do not place the `tctl` and `tsh` clients in the System32 directory, as this can cause issues when using WinSCP.
     # Use %SystemRoot% (C:\Windows) or %USERPROFILE% (C:\Users\<username>) instead.
     ```
 
   

 
   

Linux

     Linux 설치판의 모든 Teleport 바이너리에는 `tctl` and `tsh` clients가 포함되어 있습니다.  RPM/DEB
     패키지 및 i386/ARM/ARM64용 다운로드를 포함한 더 많은 옵션은
     [설치 페이지](../installation/installation.mdx)를 참조하세요.
 
     ```code
     $ curl -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
     $ tar -xzf teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
     $ cd teleport
     $ sudo ./install
     # Teleport binaries have been copied to /usr/local/bin
     ```
   

 
  • ssh openssh 도구
  • ansible >= [ansible.min_version]
  • JSON 출력을 처리하기 위한 선택적 도구 jq

1단계/3단계. 로그인 및 SSH 설정#

tsh로 Teleport에 로그인합니다.

$ tsh login --proxy=teleport.example.com

tsh config 단축 명령을 사용하여 openssh 설정을 생성합니다.

$ tsh config > ssh.cfg
Tip

바로 작동하지 않는 부분이 있다면 ssh.cfg에서 사용되는 일치 패턴을 편집할 수 있습니다.

2단계/3단계. Ansible 설정#

생성된 모든 파일을 모아둘 폴더 ansible을 생성합니다.

$ mkdir -p ansible
# 이전 단계의 openssh 설정을 ansible 디렉터리로 복사합니다
$ cp ssh.cfg ansible/
$ cd ansible

ansible.cfg 파일을 생성합니다.

[defaults]
host_key_checking = True
inventory=./hosts
remote_tmp=/tmp

[ssh_connection]
scp_if_ssh = True
ssh_args = -F ./ssh.cfg

인벤토리 파일 hosts를 직접 생성하거나 아래 스크립트를 사용하여 환경으로부터 생성할 수 있습니다. 클러스터 이름(예: teleport.example.com 또는 Teleport Enterprise Cloud의 경우 mytenant.teleport.sh 형식)을 설정하면 이 스크립트가 openssh 설정과 일치하는 호스트 이름을 생성합니다.

$ tsh ls --format=json | jq '.[].spec.hostname + ".teleport.example.com"' > hosts

3단계/3단계. 플레이북 실행#

마지막으로 간단한 ansible 플레이북 playbook.yaml을 생성해 보겠습니다.

아래 플레이북은 모든 호스트에서 hostname을 실행합니다. remote_user 매개변수를 대상 호스트에서 작동하고 Teleport에서 허용하는 유효한 SSH 사용자 이름으로 설정해야 합니다.

- hosts: all
  remote_user: ubuntu
  tasks:
    - name: "hostname"
      command: "hostname"

ansible 폴더에서 ansible 플레이북을 실행합니다.

$ ansible-playbook playbook.yaml

# PLAY [all] *****************************************************************************************************************************************
# TASK [Gathering Facts] *****************************************************************************************************************************
#
# ok: [terminal]
#
# TASK [hostname] ************************************************************************************************************************************
# changed: [terminal]
#
# PLAY RECAP *****************************************************************************************************************************************
# terminal                   : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

이제 모든 설정이 완료되었습니다. 이제 수명이 짧은 SSH 인증서를 사용하고 있으며 Teleport는 감사 로그에 모든 ansible 명령을 기록할 수 있습니다.

문제 해결#

Ansible이 연결할 수 없는 경우 다음과 같은 오류가 표시될 수 있습니다.

example.host | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname example.host: Name or service not known",
    "unreachable": true
}

ssh.cfg에서 인벤토리 호스트와 일치하는 패턴을 확인하고 조정할 수 있습니다.

ssh.cfg를 사용하여 verbose 모드로 SSH 연결을 시도해 오류를 확인해 보세요.

$ ssh -vvv -F ./ssh.cfg root@example.host

ssh가 작동한다면 verbose 모드를 켜고 플레이북을 실행해 보세요.

$ ansible-playbook -vvvv playbook.yaml

호스트 이름에 대문자(예: MYHOSTNAME)가 포함되어 있는 경우, Teleport의 내부 호스트 이름 일치는 기본적으로 대소문자를 구분하므로 이로 인해 이 오류가 발생할 수도 있다는 점에 유의하세요.

이 경우라면 Teleport 관리자에게 클러스터 수준에서 대소문자를 구분하지 않는 라우팅을 활성화하도록 요청하여 이 문제를 우회할 수 있습니다. 관리자는 다음 지침에 따라 대소문자를 구분하지 않는 라우팅을 활성화할 수 있습니다.

Teleport auth_service를 실행하는 모든 서버에서 /etc/teleport.yaml 설정 파일을 편집한 다음 각 서버에서 Teleport를 재시작하세요.

auth_service:
  case_insensitive_routing: true

tctl edit cluster_networking_config를 실행하여 다음 사양을 추가한 다음 저장하고 종료하세요.

spec:
  case_insensitive_routing: true