목적은 예상 프로그램을 사용하지 않고 원격 서버의 모든 사용자에게 공개 키를 일괄 적으로 푸시하여 암호없이 로그인하는 것입니다. 즉, 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:
이 파일을 계속 편집 할 수 있습니다.