이것은 공개 키를 배치로 푸시하는 올바른 방법입니다. 공개 키를 배치로 푸시하는 하나의 명령입니다. ssh 스크립트 방법은 오래되었습니다. Ansible이 왕입니다.

목적은 예상 프로그램을 사용하지 않고 원격 서버의 모든 사용자에게 공개 키를 일괄 적으로 푸시하여 암호없이 로그인하는 것입니다. 즉, ansible 모듈을 사용하여 초기화 스크립트를 사용하지 않고이를 수행 할 수 있습니다.

일반적인 아이디어는 다음과 같습니다.

먼저 암호화 된 파일을 만들고 우리가 사용한 변수와 값 (즉, 원격 서비스에 연결하기위한 ssh 사용자 이름의 비밀번호)을이 암호화 된 파일에 편집합니다. 나중에 ansible을 사용하여 ssh 사용자의 암호가 유출되지 않도록 보호하십시오.
이 플레이 북 암호화 파일을 사용한 후 authorized_key사용자 인증 공개 키로 지정된 원격 호스트에 모듈 사용 하여 전송합니다.

1. 임시 주문 방법

1 먼저 상대방의 호스트 공개 키를 감지하지 않도록 구성

에서 ansible.cfg다음 파일을 설정

[defaults]
host_key_checking = False

2 Ansible 목록 (리소스 목록)에 원격 호스트의 사용자 및 비밀번호를 추가합니다.

# 远程服务器的 IP 或者可被本机解析的远程服务器的主机名  
127.0.0.1  ansible_ssh_user=test ansible_ssh_pass=123

3 authorized_key 모듈을 사용하여 공개 키 전송

ansible 127.0.0.1 -i hosts -m authorized_key -a "user=test state=present key={
    
    { lookup('file', '/root/.ssh/id_rsa.pub') }}"

모듈 옵션 :

  • user 원격 서버의이 사용자와 신뢰 관계를 설정하려면 지정하십시오.
  • state가능한 값 :
    - present키 추가
    - absent공개 삭제
    -로컬 사용자의 공개 키 키, 설정할 공개 키 조회 파일을 찾아야합니다.

입력 결과는 다음과 같습니다.

[root@VM-0-11-centos ~]# ansible 127.0.0.1 -i hosts -m authorized_key -a "user=test state=present key={
    
    { lookup('file', '/root/.ssh/id_rsa.pub') }}"
127.0.0.1 | CHANGED => {
    
    
    "ansible_facts": {
    
    
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "comment": null,
    "exclusive": false,
    "follow": false,
    "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCa91G2W5TcCUl10XAepJo8UNgj08RcyzUh3/FCPP1sM/0ZdZhRwB2wERJ7l9iZgzHEHgMm3VzOsjC+5Fme5Gtnbj187is9fFBKK1yWFUmmsEcfQLAUAdWq4zn2TkcHGnRLbHpDeZ+kNXZVe9UkSPCUTvfeoMo0cxnFdYkcJuKhX82V6YZctm3ltgx9mtLwEkj5mO1KCvtof2cEoDHwoQ+iFH4gNQ0rysGhADgKbGYnCTG64Kmw4yvsmHUOhEixU7B+Ff4lNauUATyR0whh4gXpUYR7VdnbZ3UnfYAd8QKIICrvYLM8EwEBcoZ3erAejq+/l7ckYx9bZrMBJfe+m/9d root@VM-0-11-centos",
    "key_options": null,
    "keyfile": "/home/test/.ssh/authorized_keys",
    "manage_dir": true,
    "path": null,
    "state": "present",
    "user": "test",
    "validate_certs": true
}

4 테스트

[root@VM-0-11-centos ~]# ansible 127.0.0.1 -i hosts -m ping
127.0.0.1 | SUCCESS => {
    
    
    "ansible_facts": {
    
    
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

둘째, 플레이 북 방법

플레이 북을 사용하여 공개 키를 푸시 할 때 원격 호스트의 암호를 암호화 할 수도 있습니다.

1 암호화 된 파일 생성

사용 ansible-vault create을 통해 암호화 된 파일을 생성하는 명령을 사용합니다.
암호화 된 파일의 암호를 해독하기 위해 암호를 입력하라는 메시지가 표시되고, 암호를 두 번 입력하고, vi이 파일을 편집하기 위해 기본 편집기를 호출 한 다음이 파일에 데이터 암호화 및 기타 변수를 쓰고 완료 한 후 저장하고 종료해야 할 수 있습니다. 그게 다야.

암호화 된 파일 생성 명령 :

[root@qfedu ~]# ansible-vault create vault-foo.yml
New Vault password:                         # 输入解密这个这文件的密码
Confirm New Vault password:            # 再次确认密码

컨텐츠 편집 :

ansible_ssh_pass: upsa

암호화 확인 :

[root@xiuyun ~]# cat vault-foo.yml
$ANSIBLE_VAULT;1.1;AES256
36643038636237353237313537366136633865346165336366346530326633343530306637666262
3839353230363763376438396438393538343065363564370a343163306161643063333239306537
66616562613931396338336437656237366261376235326265383334363462646262303864633864
3962353863656633360a343863613337643239633136663631636462613132613763393638353866
35653661326264656130323165663031653430383934623135633539643661333434

2 플레이 북에서이 암호화 된 파일 사용

플레이 북

[root@qfedu ~]# cat send-pubkey.yml
- hosts: all
  remote_user: root   # 连接远程主机的用户,密码就是加密文件中设置好的 ansible_ssh_pass 的值
  vars_files:
    - foo.yml    # 加密文件
  tasks:
  - name: Set authorized key taken from file
    authorized_key:    # 发送公钥的模块
      user: root            # 给这个用户发送公钥
      state: present
      key: "{
    
    { lookup('file', '/root/.ssh/id_rsa.pub') }}"    # 发送本地用户的公钥路径

3 플레이 북 실행

--ask-vault-pass암호를 해독 하려면 매개 변수를 사용하여 암호를 지정해야합니다.

ansible-playbook -i hosts send-pubkey.yml --limit dbservers --ask-vault-pass
Vault password:

또한 ansible.cfg구성 파일 DEFAULT_VAULT_PASSWORD_FILE값에 파일을 가리킬 수 있으며, 파일은 암호 해독을 위해 저장됩니다.

vault_password_file = /path/to/vault_password_file

이 플레이 북 실행 --ask-vault-pass매개 변수를 사용하지 마십시오 .

[root@xiuyun ~]# ansible-playbook -i hosts send-pubkey.yml --limit dbservers

PLAY [all] *********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [172.18.0.3]

TASK [Set authorized key taken from file] **************************************
changed: [172.18.0.3]

PLAY RECAP *********************************************************************
172.18.0.3                 : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

4 확인

[root@xiuyun ~]# ssh [email protected]  "hostname -i;ls ~/.ssh"
172.18.0.3
authorized_keys

5 암호화 된 파일의 내용 수정

이 암호화 된 파일을 다시 편집 할 수 있습니다.

암호화 된 파일의 암호를 해독하려면 암호를 제공해야합니다. 암호화 된 파일을 만들 때 입력 한 암호입니다.

[root@qfedu ~]# ansible-vault edit vault-foo.yml
Vault password:    

이 파일을 계속 편집 할 수 있습니다.

image.png

추천

출처blog.csdn.net/qq_22648091/article/details/108697801