Làm cách nào để đặt tên người dùng / mật khẩu mặc định cho kết nối SSH?


60

Tôi đang sử dụng Ansible và tôi có cấu hình này trong kho của tôi / tất cả:

[master]
192.168.1.10 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

[slave]
192.168.1.11 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
192.168.1.12 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

[app]
192.168.1.13 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

[all:children]
master
slave

Tôi không muốn lặp lại tất cả các tham số cho mỗi phiên bản mới. Làm thế nào tôi có thể cấu hình chúng chỉ ở một nơi? Có tập tin nào với các tham số này không?


3
~/.ssh/config
ceejayoz

1
@ceejayoz Bạn có thể giải thích một chút
Robert

Tôi không phải là quản trị viên Ansible và các tài liệu bị che mờ về chủ đề ( đây là "biến" hay "tham số" và có sự khác biệt không? ) Nhưng có vẻ như bạn có thể xác định các biến ở cấp độ nhóm bằng cách nào đó.
DerfK

Câu trả lời:


74

Bạn có thể thêm phần sau vào tệp kiểm kê của bạn:

[all:vars]
ansible_connection=ssh
ansible_user=vagrant
ansible_ssh_pass=vagrant

Lưu ý: Trước Ansible 2.0 ansible_useransible_ssh_user.


2
Trên Ansible 2.0, nó phải là: [all:vars] ansible_connection=ssh ansible_port=22 ansible_user=admin
zx1986

2
@ zx1986 bạn đã đọc nó ở đâu?
030

2
@ 030 tại đây: docs.ansible.com/ansible/ từ
zx1986

Lưu ý rằng cổng 22 là mặc định cho ansible_port, vì vậy bạn không cần chỉ định rõ ràng trừ khi khác. Quan tâm nếu có ai biết cách áp dụng các biến cho nhiều nhóm cùng một lúc (nhưng không phải là 'tất cả'), phân tách dấu phẩy dường như không hoạt động.
William Turrell

1
@WilliamTurrell hơi muộn nhưng .. bạn có thể tạo một nhóm các nhóm (với công cụ sửa đổi: children) và sau đó đặt các biến sau đó (với công cụ sửa đổi: vars).
Lasse Halberg Haarbye

23

Biến nhóm

Bạn có thể đặt các biến áp dụng cho tất cả các máy chủ bằng cách sử dụng bố cục Playbook được chỉ định trong tài liệu Thực tiễn tốt nhất của Ansible và tạo một group_vars/alltệp nơi bạn xác định chúng .

---
# file: group_vars/all
ansible_connection: ssh 
ansible_ssh_user: vagrant 
ansible_ssh_pass: vagrant

[sửa] Tôi bối rối mặc dù những gì bạn đang cố gắng làm mặc dù. Bạn không cần chỉ định người dùng hoặc mật khẩu Ansible trong kho. Nếu bạn đang sử dụng Vagrant, bạn chắc chắn không, và nếu bạn đang gọi Ansible từ dòng lệnh, bạn có thể chỉ định người dùng --user=vagrantvà yêu cầu mật khẩu --ask-pass.


1
Tôi chỉ cần làm một tổ chức tốt hơn về cơ sở hạ tầng của tôi. Nếu luôn luôn tôi sẽ sử dụng vagrant: vagrant Tôi muốn đặt cấu hình ở một nơi có tải Ansible theo mặc định, nhưng tôi không biết ở đâu. Mỗi kết nối được thực hiện phải sử dụng nó.
Robert

Các tập tin phải được đặt tên group_vars/all/main.ymlhoặc đơn giản group_vars/all?
realtebo

cái này hoạt động với tôi sau khi cài đặt sshpass-"you must install the sshpass program"
user9869932

1
@realtebo Tập tin phải được đặt tên group_vars/all.
xloto

1
-k cho hỏi pass không có nhiều niềm vui cho "tất cả" khi mỗi máy chủ lưu trữ có một mật khẩu khác nhau. Có, bạn cần sshpass và có lẽ bạn cần phải biết seed_host nếu bạn chưa bao giờ kết nối trước đó ~ \ .ssh \ config là cách để đi.
mckenzm

5

Tôi nghĩ rằng tốt hơn là sử dụng cài đặt khóa ssh trên tất cả các máy chủ. Bạn chỉ nên chạy ssh-copy-id trên mỗi nút và cài đặt khóa ssh ở mọi nơi để có thể đăng nhập bằng khóa ssh của bạn. Sẽ an toàn hơn khi không lưu mật khẩu vào playbook / kho.

Để làm điều này, bạn nên tạo cặp khóa ssh của bạn và chạy ssh-copy-id cho tất cả các máy chủ sau đó.


1
Nếu ai đó có thể đánh cắp mật khẩu từ tệp cấu hình của bạn, họ cũng có khả năng sẽ có thể nhập các khóa ssh của bạn. Và điều này không có gì để làm với việc trả lời câu hỏi của OP. Câu hỏi này không hỏi ý kiến ​​về các lựa chọn thay thế.
Muh Fugen

@MuhFugen> Làm cách nào tôi có thể định cấu hình chúng chỉ ở một nơi? Có tập tin nào với các tham số này không? Đây là một cụm từ chính xác để lại cánh cửa cho ý kiến ​​cũng như phản hồi mang lại sự hiểu biết về hướng đi đúng đắn. Cấu hình ăn cắp (có thể sống trong git repo ở đâu đó) không giống như ăn cắp khóa riêng.
podarok

4

Thêm bên dưới vào máy chủ lưu trữ.

Dành cho Ansible <2.0:

[all:vars]
ansible_connection=ssh
ansible_ssh_user=vagrant 
ansible_ssh_pass=vagrant

Đối với Ansible> = 2.0 :

[all:vars]
ansible_connection=ssh # actually default mode smart is OK
ansible_user=vagrant
ansible_pass=vagrant # or ansible_ssh_pass=vagrant

Các liên kết đề cập ansible_ssh_pass, không ansible_pass.
Matthias Weiler

2

Tuyên bố miễn trừ trách nhiệm: Tôi chỉ thử nghiệm điều này trên OSX. Dựa trên các tài liệu khác nhau, tôi hy vọng nó hoạt động trên các nền tảng khác.

"thư mục dự án" đề cập đến thư mục cơ sở cho dự án Vagrant - thư mục chứa Vagrantfile.

Tệp Ansible Inventory được tạo tự động bởi Vagrant:

Vagrant tạo một tệp kiểm kê với các vars kết nối Ansible mặc định. Hãy tìm nó trong <project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory.

Tập tin này sẽ được tái tạo bởi Vagrant khi cần, vì vậy các chỉnh sửa thủ công sẽ bị ghi đè. Tuy nhiên, theo tài liệu của Vagrant, bạn có thể chỉ định nhiều máy, vars nhóm, v.v. Vagrantfilevà chúng sẽ được thêm vào tệp kiểm kê này.

Cấu hình Ansible để mặc định cho tệp kho này:

Để đặt tệp này thành mặc định được sử dụng bởi ansiblelệnh khi bạn đang ở trong thư mục dự án (trên máy chủ), hãy thêm một ansible.cfgtệp trong thư mục dự án của bạn với các nội dung này, thay đổi đường dẫn khi cần:

[defaults]
inventory = ./path/to/inventory

Để xác nhận rằng tệp kiểm kê này đang được sử dụng, hãy tìm tệp này như mặc định được báo cáo bởi ansible:

(từ trong thư mục dự án)

$ ansible | grep inventory ERROR! Missing target hosts -i INVENTORY, --inventory-file=INVENTORY specify inventory host path (default=./.vagrant/provis ioners/ansible/inventory/vagrant_ansible_inventory) or

Để xác nhận máy chủ của bạn:

$ ansible all --list-hosts hosts (2): master slave

Sử dụng Ansible với các máy chủ này:

Từ trong thư mục dự án, sau đó bạn sẽ có thể sử dụng ansiblenhư bình thường với các máy chủ mà bạn đã xác định Vagrantfile.

Ví dụ:

ansible slave -a 'hostname'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.