Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Junos 디바이스에서 Ansible 모듈을 실행하는 사용자 인증

Ansible 컬렉션의 juniper.device 모듈 세트를 juniper.device 사용할 때 사용자를 인증하는 방법을 이해합니다.

주니퍼 네트웍스는 Junos OS를 실행하는 디바이스와 진화한 Junos OS를 실행하는 디바이스를 관리하는 데 사용할 수 있는 Ansible 모듈을 제공합니다. 주니퍼 네트웍스 모듈은 컬렉션을 juniper.device 통해 배포됩니다. 컬렉션에는 juniper.device 두 가지 모듈 세트가 포함되어 있습니다.

이 주제에서는 모듈 세트만 사용할 juniper.device 때 사용자를 인증하는 방법에 대해 설명합니다. 모듈을 junipernetworks.junos 사용하여 Junos 디바이스에 연결하고 인증하는 방법에 대한 자세한 내용은 juniper.device.junos_* Ansible 모듈을 사용하여 Junos 디바이스 관리를 참조하십시오.

인증 개요

이 모듈을 juniper.device 사용하면 SSH, 텔넷 또는 직렬 콘솔 연결을 사용하여 Junos 디바이스에 직접 연결하고 관리할 수 있습니다. 또한 모듈은 디바이스의 CONSOLE 포트에 연결된 콘솔 서버에 대한 SSH 또는 텔넷 연결을 통해 디바이스 연결을 지원합니다. 원격 디바이스는 연결 프로토콜에 따라 암호 또는 기타 표준 SSH 인증 메커니즘을 사용하여 사용자를 인증할 수 있어야 합니다.

Ansible을 사용하여 Junos 디바이스를 관리할 때 디바이스에 액세스하는 가장 편리한 방법은 SSH 키를 구성하는 것입니다. SSH 키를 사용하면 원격 디바이스에서 신뢰할 수 있는 사용자를 식별할 수 있습니다. 또는 모듈 및 플레이북을 실행할 때 사용자 이름과 비밀번호를 제공할 수 있습니다.

SSH 연결의 경우, 모듈은 juniper.device 먼저 SSH 공개 키 기반 인증을 시도한 다음 암호 기반 인증을 시도합니다. 비밀번호 기반 인증이 사용되는 경우, 제공된 비밀번호가 디바이스 비밀번호로 사용됩니다. SSH 키를 사용할 때 제공된 암호는 개인 키를 잠금 해제하기 위한 암호입니다. 키를 SSH 인증 에이전트에 로드하거나 SSH 개인 키에 빈 암호가 있는 경우에는 암호를 제공할 필요가 없습니다. 그러나 빈 암호와 함께 SSH 개인 키를 사용하는 것은 권장하지 않습니다.

Ansible은 암호 기반 인증 또는 암호로 보호된 SSH 키에 대한 암호를 제공하는 다양한 방법을 제공합니다. 일부 옵션에는 플레이북 프롬프트 사용, 명령줄 옵션 제공 또는 비밀번호를 안전하게 저장하는 볼트 암호화 데이터 파일 생성이 포함됩니다. 자세한 내용은 공식 Ansible 설명서를 참조하십시오.

다음과 같은 방법으로 모듈에 대한 연결 및 인증 매개 변수를 juniper.device 지정할 수 있습니다. 값을 명시적으로 정의하지 않으면 경우에 따라 기본값이 사용됩니다. 기본값은 주니퍼 네트웍스 모듈의 기본값 이해에 설명되어 있습니다. 여러 위치에서 매개 변수의 값을 정의하는 경우 Ansible은 공식 Ansible 문서의 변수 우선 순위 이해에 설명된 대로 변수 우선 순위를 기반으로 값을 선택합니다.

  • Ansible 변수 - 일반 Ansible 변수(예: 인벤토리 또는 볼트 파일, 호스트 또는 그룹 변수 또는 명령줄 인수)를 사용하여 연결 및 인증 매개 변수 값을 지정할 수 있습니다.

  • SSH 클라이언트 구성 파일—SSH 연결의 경우, 모듈은 ~/.ssh/config에 있는 기본 SSH 구성 파일을 자동으로 쿼리합니다(있는 경우). 다른 구성 파일을 지정하는 옵션을 포함 ssh_config 할 수 있습니다. 모듈은 설정을 재정의하는 변수를 명시적으로 정의하지 않는 한 지정된 연결에 대해 SSH 구성 파일의 모든 관련 설정을 사용합니다.

  • 모듈 인수 - 모듈은 juniper.device 로컬 연결(connection: local)에 대한 연결 및 인증 관련 옵션을 최상위 모듈 인수로 지정할 수 있도록 지원합니다.

  • 플레이북 vars: 섹션 - 모듈은 juniper.device 인증 매개 변수를 정의하는 방법에서 설명된 플레이 섹션의 로컬 및 영구 연결 vars: 에 대한 연결 및 인증 관련 옵션 지정을 지원합니다.

주니퍼 네트웍스 모듈의 기본값 이해

Junos 디바이스를 관리하는 모듈에 대한 연결 및 인증 매개 변수를 명시적으로 정의할 수 있습니다. 매개 변수를 정의하지 않으면 모듈이 경우에 따라 기본값을 사용합니다. 표 1 은 모듈 세트의 공통 연결 매개 변수에 대한 기본값과 변수 우선 순위를 간략하게 설명합니다.juniper.device 개별 모듈에 대해 허용되는 인수에 대한 자세한 내용은 해당 모듈에 대한 API 참조 설명서를 참조하십시오.

표 1: 연결 매개 변수에 대한 기본값 및 변수 우선 순위

매개 변수 이름

매개 변수 별칭

설명

기본값 및 변수 우선 순위

host

hostname

ip

연결을 설정해야 하는 원격 디바이스의 호스트 이름 또는 IP 주소입니다.

{{ inventory_hostname }}

passwd

password

매니지드 디바이스로 인증하는 데 필요한 사용자의 비밀번호 또는 SSH 키 암호 구문입니다.

  1. ANSIBLE_NET_PASSWORD 환경 변수

  2. 에 대해 -k 지정된 값 또는 --ask-pass 명령줄 옵션

ssh_config

SSH 클라이언트 구성 파일의 경로입니다.

이 매개 변수를 생략하면 모듈은 기본 위치에 있는 SSH 구성 파일을 사용합니다(있는 경우).

~/.ssh/구성

ssh_private_key_file

ssh_keyfile

원격 디바이스로 인증하는 데 사용되는 SSH 개인 키 파일의 경로입니다.

경로를 명시적으로 지정하지 않고 기본값을 찾을 수 없는 경우, 모듈은 사용자의 SSH 구성 또는 운영 체제별 기본값에 지정된 SSH 개인 키 파일을 사용합니다.

  1. ANSIBLE_NET_SSH_KEYFILE 환경 변수

  2. 에 대해 --private-key 지정된 값 또는 --key-file 명령줄 옵션

  3. 없음

user

username

관리 노드로 인증하는 데 사용되는 사용자 이름입니다.

  1. ANSIBLE_NET_USERNAME 환경 변수

  2. remote_user Ansible에서 정의한 대로

  3. USER 환경 변수

주니퍼 네트웍스 모듈 host 을 실행할 때 연결에는 항상 인수가 필요합니다. 그러나 호스트는 기본적으로 {{ inventory_hostname }}로 설정되므로 호스트를 명시적으로 지정할 필요는 없습니다.

관리되는 Junos 디바이스에 액세스할 수 있는 모든 사용자 계정을 사용하여 모듈을 실행할 수 있습니다. Junos OS 사용자 계정 액세스 권한이 적용되며, Junos OS 사용자에 대해 구성된 클래스가 권한을 결정합니다. 사용자를 지정하지 않으면 표 1에 설명된 알고리즘에 따라 사용자가 설정됩니다.user 다음을 포함하여 여러 가지 방법으로 설정할 수 있는 정의에 remote_user사용되는 우선 순위는 Ansible 설명서를 참조하십시오.

  • -u 또는 --user 명령줄 옵션

  • ANSIBLE_REMOTE_USER 환경 변수

  • remote_user 구성 설정

vars에서 인증 매개 변수를 정의하는 방법: 로컬 및 영구 연결 섹션

플레이 섹션 vars: 에서 모듈에 juniper.device 대한 연결 및 인증 매개 변수를 정의할 수 있습니다. 이 옵션은 SSH 구성 파일, Ansible 인벤토리 파일, 명령줄 인수 또는 모듈 인수와 같은 다른 수단을 통해 매개 변수를 정의하는 것 외에도 제공됩니다. 이 vars: 섹션을 사용하면 플레이의 모든 모듈이 호스트에 연결하는 데 사용할 수 있는 단일 위치에서 공통 연결 매개 변수를 정의할 수 있습니다. 또한 여기에 설명된 대로 특정 Ansible 연결에서는 플레이 내에서 파라미터를 정의할 때 섹션을 vars: 사용해야 합니다.

이 모듈은 juniper.device 다음과 같은 Ansible 연결 유형을 지원합니다.

  • 로컬 연결은 다음을 사용하여 정의됩니다. connection: local

  • 다음을 사용하여 정의되는 영구 연결입니다. connection: juniper.device.pyez

로컬 및 영구 연결 모두에서 Ansible은 제어 노드에서 로컬로 모듈을 실행합니다. 를 사용하면 connection: localAnsible은 연결이 필요한 플레이의 각 작업에 대해 호스트에 대한 별도의 연결을 설정합니다. 반대로 를 사용하면 connection: juniper.device.pyezAnsible은 호스트에 대한 단일 영구 연결을 설정하며, 이는 플레이의 모든 작업 실행 동안 지속됩니다.

로컬 연결과 마찬가지로 영구 연결에 동일한 연결 및 인증 매개변수를 사용하며 기본 매개변수 값은 두 연결 유형에 모두 적용됩니다. 로컬 연결의 경우, 섹션 또는 모듈 인수로 연결 및 인증 매개 변수 vars: 를 정의할 수 있습니다. 두 위치에서 매개 변수를 정의하면 모듈 인수가 우선합니다. 그러나 영구 연결을 위해 플레이 내에서 매개변수를 정의할 때는 섹션에서 매개변수를 정의해야 합니다. vars: 영구 연결을 사용하면 모든 작업에 대해 단일 연결만 있으므로 해당 플레이의 모든 작업에 적용되도록 매개 변수를 전역적으로 정의해야 합니다.

다음 플레이북은 인벤토리 그룹의 각 호스트에서 두 juniper.device 개의 모듈을 실행합니다. 이 플레이에서는 Ansible 연결을 juniper.device.pyez로 정의하며, 이는 플레이의 모든 작업 실행 동안 지속되는 각 호스트에 대한 연결을 설정합니다. 플레이 섹션 vars: 은 영구 연결에 대한 인증 매개 변수를 정의합니다. userpasswd 값은 Vault 파일에 정의된 참조 변수입니다.vault-vars.yaml

SSH 키를 사용하여 사용자를 인증하는 방법

이 모듈을juniper.device 통해 SSH 키를 사용하여 Junos 디바이스 또는 디바이스에 연결된 콘솔 서버에 연결할 수 있습니다. SSH 키를 사용하여 사용자를 인증하려면 먼저 Ansible 제어 노드에서 키를 생성한 다음 모듈이 연결할 디바이스(관리되는 Junos 디바이스 또는 Junos 디바이스에 연결된 콘솔 서버)에서 키를 구성합니다.

SSH 키 생성 및 구성

Ansible 제어 노드에서 SSH 키를 생성하고 원격 디바이스에서 공개 키를 구성하려면 다음을 수행합니다.

  1. Ansible 제어 노드에서 사용자의 공개 및 개인 SSH 키 쌍을 생성하고 필요한 옵션을 제공합니다(예:
  2. (선택 사항) 네이티브 SSH 키 에이전트에 키를 로드합니다. 예를 들면 다음과 같습니다.
  3. 모듈이 연결할 각 디바이스에서 공개 키를 구성합니다. 여기에는 Junos 디바이스 또는 Junos 디바이스에 연결된 콘솔 서버가 포함될 수 있습니다.

    Junos 디바이스에서 공개 키를 구성하는 가장 쉬운 방법은 적절한 사용자 계정으로 공개 키가 포함된 파일을 로드하는 것입니다.

  4. 키를 사용하여 디바이스에 로그인하여 키가 작동하는지 확인합니다.

Ansible 플레이북에서 SSH 키 사용

원격 디바이스에서 SSH 키 쌍을 생성하고 공개 키를 구성한 후 키를 사용하여 디바이스에 연결할 수 있습니다. 주니퍼 네트웍스 모듈은 ~/.ssh/config에 있는 기본 SSH 구성 파일이 있는 경우 자동으로 쿼리합니다. 또한 다른 구성 파일을 지정하는 옵션을 정의 ssh_config 할 수도 있습니다. 모듈은 설정을 재정의하는 변수를 명시적으로 정의하지 않는 한 지정된 연결에 대해 SSH 구성 파일의 모든 관련 설정을 사용합니다. 또한 모듈은 기본 위치의 키와 SSH 키 에이전트에서 능동적으로 로드된 키를 자동으로 찾습니다.

SSH 키에 대한 특정 설정을 정의하기 위해 Ansible 플레이북에 적절한 인수를 포함할 수 있습니다. 모듈 및 Ansible 연결 집합에 적합한 위치에 인수를 정의합니다. 예를 들어 영구 연결이 있는 모듈을 juniper.device 사용하는 플레이의 경우 섹션에서 vars: 설정을 정의합니다. 다음 요소에 따라 플레이북에 포함할 인수가 결정됩니다.

  • 키 위치

  • 키가 SSH 키 에이전트에 능동적으로 로드되었는지 여부

  • 키가 암호로 보호되는지 여부

  • 사용자의 SSH 구성 파일이 이미 해당 호스트에 대한 설정을 정의하고 있는지 여부

다음 예제에서는 다양한 시나리오를 해결하는 방법을 간략하게 설명합니다.

  • 네이티브 SSH 키 에이전트에 능동적으로 로드되거나 기본 위치에 있고 암호 보호가 없는 SSH 키를 사용하여 Junos 디바이스에 연결하기 위해 기본값과 다른 경우가 아니면 연결 또는 인증 관련 인수를 정의할 필요가 없습니다.

  • 기본 위치에 없고 암호 보호가 없는 SSH 키를 사용하여 Junos 디바이스에 연결하려면 인수를 SSH 개인 키 파일 경로로 설정합니다 ssh_private_key_file . 예를 들면 다음과 같습니다.

    또는 다음을 통해 SSH 개인 키의 경로를 지정할 수 있습니다. SSH 구성 파일에서 정의; 환경 변수를 ANSIBLE_NET_SSH_KEYFILE 설정하거나 플레이북을 실행할 때 OR --key-file 명령줄 옵션을 정의 --private-key 합니다.

  • 암호로 보호된 SSH 키 파일을 사용하여 Junos 디바이스에 연결하기 위해 권장되는 방법으로, 여러 가지 방법으로 SSH 키 파일 암호를 참조할 수 있습니다. 예를 들어 인수를 사용 passwd 하거나, Ansible 변수를 정의하거나, 명령줄 옵션을 제공할 수 있습니다.

    다음 예제에서는 명령줄 옵션으로 --ask-pass 플레이북을 실행하여 사용자에게 암호를 묻는 메시지를 표시합니다.

    참고: 사용자 환경에 적합한 안전한 방식으로 SSH 키 파일 암호를 얻는 것은 사용자의 책임입니다. 자격 증명을 암호화되지 않은 형식으로 저장하기보다는 플레이북을 실행할 때 암호를 묻는 메시지를 표시하거나 암호화된 볼트를 사용하여 변수를 저장하는 것이 가장 좋습니다.

    SSH 키 암호에 프롬프트 또는 암호화된 볼트 파일을 사용하는 방법에 대한 자세한 내용은 플레이북 또는 명령줄 암호 프롬프트를 사용하여 사용자를 인증하는 방법Ansible 볼트 암호화 파일을 사용하여 사용자를 인증하는 방법을 참조하십시오.

SSH 키를 사용하여 콘솔 서버에 연결하는 방법에 대한 지침은 콘솔 서버를 통해 인증하는 방법을 참조하십시오.

플레이북 또는 명령줄 암호 프롬프트를 사용하여 사용자를 인증하는 방법

Ansible 모듈을 실행하는 사용자를 인증하기 위해 플레이북을 실행할 때 사용자의 자격 증명을 묻는 메시지를 표시할 수 있습니다. 예를 들어, 플레이북에서 대화형 프롬프트를 정의하거나 또는 명령줄 옵션을 사용하여 -k --ask-pass 플레이북을 실행하여 암호를 프롬프트할 수 있습니다. SSH 키가 사용 중일 때, 제공된 암호는 프라이빗 SSH 키 암호로 사용됩니다. 비밀번호 기반 인증이 사용되는 경우, 제공된 비밀번호가 디바이스 비밀번호로 사용됩니다.

사용자의 암호 또는 SSH 키 암호를 얻기 위한 플레이북에서 대화형 프롬프트를 정의하려면:

  1. 아래에 vars_prompt: 사용자의 비밀번호 또는 SSH 키 암호(및 선택적으로 사용자 이름)를 입력하라는 메시지를 표시하고 변수에 값을 저장하는 코드를 포함합니다.
  2. 각각이 해당 변수를 참조하도록 and passwd 매개 변수를 user 설정합니다.
  3. 실행할 작업을 포함합니다.
  4. 사용자 이름과 비밀번호를 입력하라는 메시지를 표시하는 플레이북을 실행합니다. 변수가 로 설정되었기 때문에 터미널은 암호를 입력할 때 에코하지 않습니다.private: yes

또는 또는 명령줄 옵션으로 -k --ask-pass 플레이북을 실행하여 암호 또는 암호를 요청할 수 있습니다. 기본 사용자 이름을 사용하는 다음 플레이북을 고려하십시오.

플레이북을 실행하고 또는 명령줄 옵션을 포함 -k --ask-pass 합니다. 이 옵션은 암호를 입력하라는 메시지를 표시하고 명령줄에서 암호를 에코하지 않습니다.

Ansible 볼트 암호화 파일을 사용하여 사용자를 인증하는 방법

Ansible 볼트를 사용하여 암호 및 기타 중요한 연결 및 인증 값을 볼트로 암호화된 데이터 파일에 안전하게 저장할 수 있습니다. 그러면 플레이북은 모듈 세트 및 Ansible 연결 유형에 적합한 위치(예: 플레이 섹션 vars: 또는 모듈 인수)에서 모듈 인수로 이러한 변수를 참조할 수 있습니다.

이 예에서는 Ansible 볼트를 사용하여 새 볼트 파일을 생성하고 암호화합니다. 개별 변수를 암호화하거나 비밀번호가 다른 여러 암호화된 파일을 사용할 수도 있습니다. Ansible 볼트를 사용하여 컨텐츠 및 파일을 암호화하는 방법에 대한 자세한 내용은 공식 Ansible 설명서를 참조하십시오.

암호를 포함하여 필수 변수가 포함된 Ansible 볼트 파일을 생성하고 사용하려면 다음을 수행합니다.

  1. 볼트로 암호화된 데이터 파일을 작성하고 데이터 파일을 암호화, 복호화, 편집 및 사용하는 데 필요한 비밀번호를 지정합니다.
  2. 파일에 필요한 변수를 정의하고 저장합니다.
  3. 파일이 암호화되었는지 확인합니다.
  4. 플레이북에서 볼트 암호화 변수 파일을 포함하고 모듈 및 Ansible 연결 유형에 적합한 위치에서 필요한 변수를 참조합니다.
    참고:

    대신 볼트에서 실제 userpasswd 변수를 정의하는 경우 모듈이 자동으로 선택하므로 플레이북에서 명시적으로 정의할 필요가 없습니다.

  5. 볼트 비밀번호를 입력하라는 메시지를 표시하는 옵션으로 --ask-vault-pass 플레이북을 실행합니다.

콘솔 서버를 통해 인증하는 방법

주니퍼 네트웍스 Ansible 모듈은 콘솔 서버를 통해 Junos 디바이스에 연결할 수 있습니다. 콘솔 서버를 통한 SSH 연결의 경우, 콘솔 서버와 Junos 디바이스 모두에 대한 인증 자격 증명을 제공해야 합니다. 콘솔 서버 인증에는 디바이스 비밀번호 또는 비밀번호로 보호된 SSH 키 파일을 사용할 수 있습니다.

콘솔 서버를 통해 Junos 디바이스에 연결하려면 기본값이 없거나 기본값이 적절하지 않은 경우 플레이북에 다음 매개 변수를 제공해야 합니다.

  • host—콘솔 서버 호스트 이름 또는 IP 주소

  • userpasswd—Junos OS 로그인 자격 증명

  • cs_user—콘솔 서버 사용자 이름

  • cs_passwd- 콘솔 서버 인증에 필요한 디바이스 비밀번호 또는 SSH 키 파일 암호

  • port—포트(기본값과 다른 경우)

다음 예에서는 Junos OS 사용자 및 콘솔 서버 사용자의 자격 증명이 Ansible 볼트 파일에 정의되어 있습니다. 그런 다음 볼트 변수가 플레이북에서 참조됩니다. 이 경우 cs_passwd 인수는 인수에 지정된 SSH 키의 암호입니다.ssh_private_key_file