Junos 디바이스에서 Ansible 모듈을 실행하는 사용자 인증
인증 개요
주니퍼 네트웍스는 Junos 디바이스를 관리하는 데 사용할 수 있는 Ansible 모듈을 제공합니다. 주니퍼 네트웍스 모듈은 Ansible Galaxy에서 호스팅되는 컬렉션을 통해 juniper.device
배포됩니다.
주니퍼 네트웍스 모듈을 사용하면 SSH, 텔넷 또는 직렬 콘솔 연결을 사용하여 Junos 디바이스에 직접 연결하고 관리할 수 있습니다. 모듈은 또한 디바이스의 CONSOLE
포트에 연결된 콘솔 서버에 SSH 또는 Telnet 연결을 통해 디바이스에 연결하는 것을 지원합니다. 원격 디바이스는 연결 프로토콜에 따라 암호 또는 다른 표준 SSH 인증 메커니즘을 사용하여 사용자를 인증할 수 있어야 합니다.
Ansible을 사용하여 Junos 디바이스를 관리할 때 디바이스에 액세스하는 가장 편리한 방법은 SSH 키를 구성하는 것입니다. SSH 키를 사용하면 원격 디바이스에서 신뢰할 수 있는 사용자를 식별할 수 있습니다. 또는 모듈과 플레이북을 실행할 때 사용자 이름과 암호를 제공할 수 있습니다.
SSH 연결의 경우, 주니퍼 네트웍스 모듈은 먼저 SSH 공개 키 기반 인증을 시도한 다음 암호 기반 인증을 시도합니다. SSH 키를 사용 중인 경우 제공된 암호는 프라이빗 SSH 키를 잠금 해제하기 위한 암호로 사용됩니다. 암호 기반 인증을 사용하는 경우 제공된 암호가 디바이스 암호로 사용됩니다. SSH 공개 키 기반 인증이 사용되고 SSH 개인 키에 빈 암호가 있는 경우 암호가 필요하지 않습니다. 그러나 빈 암호와 함께 SSH 개인 키를 사용하는 것은 권장되지 않습니다. 암호 기반 인증 또는 암호로 보호된 SSH 키에 대한 암호를 검색하려면 플레이북 또는 명령줄에서 암호를 묻는 메시지를 표시하거나 암호를 안전하게 저장하는 자격 증명 모음 암호화 데이터 파일을 생성할 수 있습니다.
다음과 같은 방법으로 주니퍼 네트웍스 모듈에 대한 연결 및 인증 매개 변수를 지정할 수 있습니다. 값을 명시적으로 정의하지 않으면 주니퍼 네트웍스 모듈의 기본값 이해에 설명된 대로 일부 경우에 기본값이 사용됩니다. 여러 위치에서 매개 변수의 값을 정의하는 경우 Ansible은 공식 Ansible 문서의 변수 우선 순위 이해 에 설명된 대로 변수 우선 순위에 따라 값을 선택합니다.
-
Ansible 변수 - 일반 Ansible 변수(예: 인벤토리 또는 볼트 파일에 정의된 변수, 호스트 또는 그룹 변수) 또는 명령줄 옵션을 사용하여 연결 및 인증 매개 변수 값을 지정할 수 있습니다.
-
SSH 클라이언트 구성 파일 - SSH 연결의 경우, 주니퍼 네트웍스 모듈은 ~/.ssh/config에 기본 SSH 구성 파일이 있는 경우, 이를 자동으로 쿼리합니다. 옵션을 포함하여
ssh_config
다른 구성 파일을 지정할 수도 있습니다. 설정을 재정의하는 변수를 명시적으로 정의하지 않는 한 모듈은 지정된 연결에 대한 SSH 구성 파일의 모든 관련 설정을 사용합니다. -
모듈 인수 - 모듈은
juniper.device
로컬 연결(connection: local
)에 대한 연결 및 인증 관련 옵션을 최상위 모듈 인수로 지정하는 것을 지원합니다. -
vars:
section - 모듈은juniper.device
연극 섹션에서 로컬 및 영구 연결에 대한 연결 및 인증 관련 옵션 지정을 지원하며, 이는 vars: 로컬 및 영구 연결에 대한 인증 매개 변수 정의 방법에 설명되어vars:
있습니다.
이 문서에서는 주니퍼 네트웍스 모듈을 사용하여 Junos 디바이스를 관리할 때 인증의 다양한 측면에 대해 설명합니다.
주니퍼 네트웍스 모듈의 기본값 이해
Junos 디바이스를 관리하는 모듈에 대한 연결 및 인증 매개 변수를 명시적으로 정의할 수 있습니다. 매개 변수를 정의하지 않으면 모듈은 경우에 따라 기본값을 사용합니다. 표 1 에서는 콜렉션의 모듈에 대한 공통 연결 매개변수에 대한 기본값 및 변수 우선순위를 juniper.device
간략하게 설명합니다. 개별 모듈에 허용되는 인수에 대한 자세한 내용은 해당 모듈의 API 참조 문서를 참조하세요.
매개 변수 이름 |
매개 변수 별칭 |
묘사 |
기본값 및 변수 우선 순위 |
---|---|---|---|
|
|
연결을 설정하는 데 사용해야 하는 원격 디바이스의 호스트 이름 또는 IP 주소입니다. |
|
|
|
매니지드 디바이스로 인증하는 데 사용되는 사용자의 암호 또는 SSH 키 암호입니다. |
|
|
– |
SSH 클라이언트 구성 파일의 경로입니다. 이 매개 변수를 생략하면 모듈은 기본 위치에 있는 SSH 구성 파일(있는 경우)을 사용합니다. |
~/.ssh/구성 |
|
|
원격 디바이스로 인증하는 데 사용되는 SSH 개인 키 파일의 경로입니다. 경로를 명시적으로 지정하지 않고 기본값을 찾을 수 없는 경우 모듈은 사용자의 SSH 구성 또는 운영 체제별 기본값에 지정된 SSH 개인 키 파일을 사용합니다. |
|
|
|
관리 노드로 인증하는 데 사용되는 사용자 이름입니다. |
|
주니퍼 네트웍스 모듈을 host
실행할 때 인수는 항상 연결에 필요합니다. 그러나 호스트는 기본값이 이므로 {{ inventory_hostname }}
명시적으로 지정할 필요는 없습니다.
관리되는 Junos 디바이스에 액세스할 수 있는 모든 사용자 계정을 사용하여 주니퍼 네트웍스 모듈을 실행할 수 있습니다. 모듈을 실행하면 Junos OS 사용자 계정 액세스 권한이 적용되고 Junos OS 사용자 계정에 대해 구성된 클래스가 권한을 결정합니다. 사용자를 지정하지 않으면 표 1에 설명된 user
알고리즘에 따라 사용자가 설정됩니다. 다음을 포함하여 여러 가지 방법으로 정의할 수 있는 를 정의하는 remote_user
데 사용되는 우선 순위는 Ansible 설명서를 참조하십시오.
-
-u
또는--user
명령줄 옵션 -
ANSIBLE_REMOTE_USER
환경 변수(Environment Variable) -
remote_user
구성 설정
vars에서 인증 매개 변수를 정의하는 방법: 로컬 및 영구 연결에 대한 섹션
play's vars:
섹션에서 모듈에 juniper.device
대한 연결 및 인증 매개 변수를 정의할 수 있습니다. 이는 다른 변수(예: SSH 구성 파일, Ansible 인벤토리 파일, 명령줄 인수 또는 모듈 인수)를 통해 일반적으로 정의하는 것 외에도 추가됩니다. 이 vars:
섹션에서는 플레이의 모든 모듈이 호스트에 연결하는 데 사용할 수 있는 단일 위치에 공통 연결 매개 변수를 정의할 수 있습니다. 또한 특정 Ansible 연결에서는 여기에 설명된 대로 플레이 내에서 매개 변수를 정의할 때 섹션을 사용해야 vars:
합니다.
모듈은 juniper.device
다음과 같은 Ansible 연결 유형을 지원합니다.
-
로컬 연결 - 다음을 사용하여 정의됩니다.
connection: local
-
영구 연결 - 다음을 사용하여 정의됩니다.
connection: juniper.device.pyez
로컬 및 영구 연결 모두에 대해 Ansible은 제어 노드에서 로컬로 모듈을 실행합니다. 를 사용하면 connection: local
Ansible은 연결이 필요한 플레이의 각 작업에 대해 호스트에 대한 별도의 연결을 설정합니다. 반대로, 를 사용하면 connection: juniper.device.pyez
Ansible은 호스트에 대한 단일 영구 연결을 설정하며, 이는 플레이의 모든 작업 실행 동안 지속됩니다.
영구 연결에 대해서는 로컬 연결과 동일한 연결 및 인증 매개 변수를 사용하며, 주니퍼 네트웍스 모듈의 기본 값 이해에서 설명한 기본 매개 변수 값이 두 가지 연결 유형에 모두 적용됩니다. 로컬 연결의 경우, 연결 및 인증 매개 변수를 vars:
section 또는 module 인수로 정의할 수 있습니다. 두 위치에서 매개 변수를 정의하면 모듈 인수가 우선합니다. 그러나 영구 연결을 위해 플레이 내에서 매개 변수를 정의할 때는 섹션에서 매개 변수를 vars:
정의해야 합니다. 영구 연결을 사용하면 모든 작업에 대해 단일 연결만 있으므로 해당 플레이의 모든 작업에 적용되도록 매개 변수를 전역으로 정의해야 합니다.
다음 플레이북은 인벤토리 그룹의 각 호스트에서 두 개의 juniper.device
모듈을 실행합니다. 연극은 Ansible 연결을 juniper.device.pyez
로 정의하며, 이는 연극의 모든 작업 실행 동안 지속되는 각 호스트에 대한 연결을 설정합니다. 영구 연결에 대한 인증 매개 변수는 play의 vars:
섹션 내에서 정의됩니다. user
및 passwd
값은 Vault 파일에 정의된 vault-vars.yaml
변수를 참조합니다.
--- - name: Get Device Facts hosts: dc1 connection: juniper.device.pyez gather_facts: no vars: user: "{{ admin_username }}" passwd: "{{ admin_password }}" vars_files: - vault-vars.yaml tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}" - name: Get hardware inventory juniper.device.command: commands: "show chassis hardware" dest_dir: "{{ playbook_dir }}"
SSH 키를 사용하여 사용자를 인증하는 방법
주니퍼 네트웍스 juniper.device
모듈을 사용하면 SSH 키를 사용하여 Junos 디바이스 또는 디바이스에 연결된 콘솔 서버에 연결할 수 있습니다. SSH 키를 사용하여 사용자를 인증하려면 먼저 Ansible 제어 노드에서 키를 생성한 다음 모듈이 연결할 디바이스(매니지드 Junos 디바이스 또는 Junos 디바이스에 연결된 콘솔 서버)에서 키를 구성합니다.
SSH 키 생성 및 구성
Ansible 제어 노드에서 SSH 키를 생성하고 원격 디바이스에서 공개 키를 구성하려면 다음을 수행합니다.
Ansible 플레이북에서 SSH 키 사용
SSH 키 쌍을 생성하고 원격 디바이스에서 공개 키를 구성한 후 키를 사용하여 디바이스에 연결할 수 있습니다. 주니퍼 네트웍스 모듈은 ~/.ssh/config에 기본 SSH 구성 파일이 있는 경우 이를 자동으로 쿼리합니다. 옵션을 정의 ssh_config
하여 다른 구성 파일을 지정할 수도 있습니다. 설정을 재정의하는 변수를 명시적으로 정의하지 않는 한 모듈은 지정된 연결에 대한 SSH 구성 파일의 모든 관련 설정을 사용합니다. 또한 모듈은 기본 위치에 있는 키와 SSH 키 에이전트에 활발하게 로드된 키를 자동으로 찾습니다.
SSH 키에 대한 특정 설정을 정의하기 위해 Ansible 플레이북에 적절한 인수를 포함할 수 있습니다. 모듈 집합 및 Ansible 연결에 적합한 위치에 인수를 정의합니다(예: vars:
영구 연결과 함께 모듈을 사용하는 플레이의 juniper.device
경우 섹션). 포함할 인수는 키의 위치, 키가 SSH 키 에이전트에 활발하게 로드되는지 여부, 키가 비밀번호로 보호되는지 여부 및 사용자의 SSH 구성 파일이 해당 호스트에 대한 설정을 이미 정의하는지 여부에 따라 결정됩니다.
-
네이티브 SSH 키 에이전트에 능동적으로 로드되거나 기본 위치에 있고 암호 보호가 없는 SSH 키를 사용하여 Junos 디바이스에 연결하기 위해 기본값과 다르지 않는 한 연결 또는 인증 관련 인수를 정의할 필요가 없습니다.
juniper.device.facts: savedir: "{{ playbook_dir }}"
-
기본 위치에 있지 않고 암호로 보호되지 않는 SSH 키를 사용하여 Junos 디바이스에 연결하려면 SSH 개인 키 파일의 경로에 인수를 설정합니다
ssh_private_key_file
. 예를 들어:vars: ssh_private_key_file: "/home/user/.ssh/id_rsa_alternate" tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}"
또는 SSH 구성 파일에서 정의하여 SSH 개인 키의 경로를 지정할 수 있습니다. 환경 변수를 설정하거나, 플레이북을
ANSIBLE_NET_SSH_KEYFILE
--private-key
실행할 때 또는--key-file
명령줄 옵션을 정의합니다. -
암호로 보호된 SSH 키 파일(권장 방법)을 사용하여 Junos 디바이스에 연결하려면 인수에서
passwd
SSH 키 파일 패스프레이즈를 참조하거나 일반 Ansible 변수 또는 명령줄 옵션을 사용하여 암호를 제공할 수 있습니다.사용자 환경에 적합한 안전한 방식으로 SSH 키 파일 암호를 얻는 것은 사용자의 책임입니다. 플레이북을 호출할 때마다 프롬프트를 표시하거나 암호화되지 않은 형식으로 자격 증명을 저장하는 대신 암호화된 자격 증명 모음을 사용하여 변수를 저장하는 것이 가장 좋습니다. 예를 들어 명령줄 옵션을 사용하여
--ask-pass
플레이북을 실행하고 메시지가 표시되면 다음과 같이 SSH 키 파일 암호를 제공할 수 있습니다.vars: ssh_private_key_file: "/home/user/.ssh/id_rsa_dc" tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}"
user@localhost:~$ ansible-playbook playbook.yaml --ask-pass SSH password:
SSH 키 암호에 프롬프트 또는 암호화된 볼트 파일을 사용하는 방법에 대한 자세한 내용은 플레이북 또는 명령줄 암호 프롬프트를 사용하여 사용자를 인증하는 방법 및 Ansible 볼트 암호화 파일을 사용하여 사용자를 인증하는 방법을 참조하십시오.
SSH 키를 사용하여 콘솔 서버에 연결하는 방법에 대한 지침은 콘솔 서버를 통해 인증하는 방법을 참조하십시오.
플레이북 또는 명령줄 암호 프롬프트를 사용하여 사용자를 인증하는 방법
Ansible 모듈을 실행하는 사용자를 인증하려면 플레이북을 실행할 때 사용자의 자격 증명을 묻는 메시지를 표시할 수 있습니다. 예를 들어, 플레이북에서 대화형 프롬프트를 정의하거나 또는 --ask-pass
명령줄 옵션을 사용하여 -k
플레이북을 실행하여 암호를 묻는 메시지를 표시할 수 있습니다. SSH 키를 사용 중인 경우 제공된 암호는 프라이빗 SSH 키를 잠금 해제하기 위한 암호로 사용됩니다. 암호 기반 인증을 사용하는 경우 제공된 암호가 디바이스 암호로 사용됩니다.
사용자의 암호 또는 SSH 키 암호를 얻기 위해 플레이북에서 대화형 프롬프트를 정의하려면 다음을 수행합니다.
또는 또는 --ask-pass
명령줄 옵션을 사용하여 -k
플레이북을 실행하여 암호 또는 암호를 묻는 메시지를 표시할 수 있습니다. 기본 사용자 이름을 사용하는 다음 플레이북을 고려하십시오.
--- - name: Get Device Facts hosts: all connection: local gather_facts: no tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}" - name: Print facts ansible.builtin.debug: var: junos.version
플레이북을 실행하고 또는 --ask-pass
명령줄 옵션을 포함하여 -k
암호를 입력하라는 메시지를 표시하고 명령줄에 암호를 에코하지 않습니다.
user@localhost:~$ ansible-playbook playbook.yaml --ask-pass SSH password: PLAY [Get Device Facts] *********************************************** ...
Ansible Vault 암호화 파일을 사용하여 사용자를 인증하는 방법
저장된 비밀번호와 기타 민감한 연결 및 인증 값을 볼트로 암호화된 데이터 파일에 안전하게 저장하는 Ansible 볼트를 생성할 수 있습니다. 그런 다음 플레이북은 모듈 집합 및 Ansible 연결 유형에 적합한 위치(예: 플레이 vars:
섹션 또는 모듈 인수)에서 해당 변수를 참조할 수 있습니다.
암호를 포함한 필수 변수가 포함된 Ansible 볼트 파일을 생성하고 사용하려면 다음을 수행합니다.
콘솔 서버를 통해 인증하는 방법
주니퍼 네트웍스 Ansible 모듈은 콘솔 서버를 통해 Junos 디바이스에 연결할 수 있습니다. 콘솔 서버를 통한 SSH 연결의 경우, 콘솔 서버와 Junos 디바이스 모두에 대한 인증 자격 증명을 제공해야 합니다. 콘솔 서버 인증을 위해 디바이스 암호 또는 암호로 보호된 SSH 키 파일을 사용할 수 있습니다.
콘솔 서버를 통해 Junos 디바이스에 연결하려면 기본값이 없거나 기본값이 적절하지 않은 경우 플레이북에 다음 매개 변수를 제공해야 합니다.
-
host
- 콘솔 서버 호스트 이름 또는 IP 주소 -
user
및passwd
—Junos OS 로그인 자격 증명 -
cs_user
- 콘솔 서버 사용자 이름 -
cs_passwd
- 콘솔 서버를 사용하여 인증하는 데 필요한 디바이스 암호 또는 SSH 키 파일 암호 구문
다음 예제에서는 Junos OS 사용자 및 콘솔 서버 사용자의 자격 증명이 Ansible 볼트 파일에 정의되어 있습니다. 그런 다음 플레이북에서 자격 증명 모음 변수를 참조합니다. 이 경우 인수는 cs_passwd
인수에 지정된 ssh_private_key_file
SSH 키의 암호입니다.
--- - name: Get Device Facts hosts: dc1_con connection: local gather_facts: no vars_files: - vault-vars.yaml vars: host: "{{ inventory_hostname }}" user: "{{ junos_username }}" passwd: "{{ junos_password }}" cs_user: "{{ cs_username }}" cs_passwd: "{{ cs_key_password }}" ssh_private_key_file: "/home/user/.ssh/id_rsa_dc" tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}"