ansible은 기본적으로 OpenSSH 클라이언트를 사용합니다. Teleport는 SSH 프로토콜을 지원하며 SSH 점프 호스트로 작동합니다.
이 가이드에서는 OpenSSH 클라이언트를 Teleport 프록시와 함께 작동하도록 구성하고 샘플 ansible 플레이북을 실행합니다.
사전 요구 사항
-
실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.
-
tctl
관리 도구와tsh
클라이언트 도구.tctl
과tsh
다운로드에 대한 지침은 설치를 방문하세요.
ssh
openssh 도구ansible
>= 2.9.6JSON
출력을 처리하기 위한 선택적 도구jq
- 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면,
tsh login
으로 로그인한 다음 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결하고tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 16.2.0
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속tctl
명령어를 실행할 수 있습니다. 자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로tctl
명령어를 실행할 수도 있습니다.
1단계/3단계. SSH 로그인 및 구성
tsh
로 Teleport에 로그인합니다:
tsh login --proxy=example.com
tsh config
단축키를 사용하여 openssh
구성을 생성합니다:
tsh config > ssh.cfg
작동하지 않는 항목이 있을 경우 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.yamlPLAY [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
로 자세한 모드로 SSH 연결을 시도하십시오:
ssh -vvv -F ./ssh.cfg root@example.host
ssh
가 작동하면, 자세한 모드에서 플레이북을 실행해 보세요:
ansible-playbook -vvvv playbook.yaml