SSH接続のデフォルトのAnsibleユーザー名/パスワードを設定する方法は?


60

私はAnsibleを使用していますが、インベントリ/すべてにこの構成があります:

[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

新しいインスタンスごとにすべてのパラメーターを繰り返したくありません。それらを1か所で構成するにはどうすればよいですか?これらのパラメーターを持つファイルはありますか?


3
~/.ssh/config
— ceejayoz 14

1
@ceejayozあなたは少し説明してもらえ
— ロバート

私はAnsibleの管理者ではありません。ドキュメントは件名が曇っています(これは "変数"か "パラメータ"で、違いはありますか?)が、グループレベルで変数を何らかの形で定義できるようです。
— DerfK 14

回答:


74

次のセクションをインベントリファイルに追加できます。

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

注: Ansible 2.0以前ansible_userはでしたansible_ssh_user。


2
Ansible 2.0より上では、次のようになります [all:vars] ansible_connection=ssh ansible_port=22 ansible_user=admin
— 。– zx1986

2
@ zx1986どこで読んだの?
— 030

2
:ここでは030 @ docs.ansible.com/ansible/...
— zx1986

ポート22はのデフォルトであるためansible_port、異なる場合を除き、明示的に指定する必要はありません。一度に複数のグループに変数を適用する方法を知っている人がいれば(「すべて」ではない)、コンマ区切りが機能しないようです。
— ウィリアムタレル

1
@WilliamTurrellは少し遅れますが、グループのグループを作成し(:children修飾子を使用)、後で変数を設定できます(:vars修飾子を使用)。
— ラッセハルベルクハーバイ

23

グループ変数

Ansibleのベストプラクティスドキュメントで指定されているプレイブックレイアウトを使用して、それらを定義するファイルを作成することにより、すべてのホストに適用される変数を設定できます。group_vars/all

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

[編集]あなたが何をしようとしているのか、私は混乱しています。インベントリでAnsibleユーザーまたはパスワードを指定する必要はありません。Vagrantを使用している場合は絶対に使用しないでください。コマンドラインからAnsibleを呼び出す場合は、ユーザーを指定し--user=vagrantて、パスワードを要求することができます--ask-pass。


1
インフラストラクチャのより良い組織化を行う必要があるだけです。常にvagrant:vagrantを使用する場合は、デフォルトでAnsibleがロードされる場所に構成を配置したいのですが、どこにあるかわかりません。実行するすべての接続で使用する必要があります。
— ロバート14

ファイルに名前をgroup_vars/all/main.yml付けるgroup_vars/allか、単に名前を付ける必要がありますか?
— -realtebo

これは、インストール後に私のために働いたsshpass-"you must install the sshpass program"
— user9869932

1
@realteboファイルには名前を付ける必要がありますgroup_vars/all。
— xloto

1
-kは、各ホストが異なるパスワードを持っている場合、「all」にとってはあまり楽しくありません。はい、sshpassが必要です。また、〜\ .ssh \ configを使用する前に接続したことがない場合は、known_hostsをシードする必要があります。
— mckenzm

5

プル全体のすべてのサーバーにsshキーのインストールを使用する方が良いと思います。ノードごとにのみssh-copy-idを実行し、sshキーを使用してログインするansibleの機能のために、sshキーをどこにでもインストールする必要があります。パスワードをPlaybook / Inventoryに保存しない方が安全です。

これを行うには、sshキーペアを生成し、 その後すべてのサーバーに対してssh-copy-idを実行する必要があります。


1
誰かがあなたの設定ファイルからパスワードを盗むことができるなら、彼らはおそらくあなたのsshキーも同様にできるでしょう。そして、これはOPの質問に答えることとはまったく関係ありません。この質問は、代替案に関する意見を求めるものではありませんでした。
— ムーフューゲン

@MuhFugen>どうすればそれらを1か所で設定できますか?これらのパラメーターを持つファイルはありますか?これは正確なフレーズであり、意見への扉を残すだけでなく、応答は正しい方向を理解します。構成の盗難(これはgitリポジトリに存在する可能性があります)は、秘密鍵の盗用とは異なります。
— ポダロック

4

以下をインベントリホストに追加します。

Ansible <2.0の場合:

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

用 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

リンクではansible_ssh_passなくに言及していansible_passます。
— マティアスワイラー

2

免責事項:OSXでのみこれをテストしました。さまざまなドキュメントに基づいて、他のプラットフォームで動作することを期待しています。

「プロジェクトディレクトリ」とは、Vagrantプロジェクトのベースディレクトリ、つまりを含むディレクトリを指しますVagrantfile。

Vagrantによって自動生成されたAnsible Inventoryファイル:

Vagrant は、デフォルトのAnsible接続変数を使用してインベントリファイルを作成します。で探してください<project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory。

このファイルはVagrantによって必要に応じて再生成されるため、手動での編集は上書きされます。ただし、Vagrantのドキュメントによると、複数のマシン、グループ変数などを指定できVagrantfile、それらはこのインベントリファイルに追加されます。

デフォルトのこのインベントリファイルにAnsibleを構成します。

ansible(ホスト上の)プロジェクトディレクトリにいるときにこのファイルをコマンドで使用されるデフォルトにするには、ansible.cfgこれらのコンテンツを含むプロジェクトディレクトリにファイルを追加し、必要に応じてパスを変更します。

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

このインベントリファイルが使用されていることを確認するには、ansibleによって報告されるデフォルトとしてそれを探します。

(プロジェクトディレクトリ内から)

$ 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

ホストを確認するには:

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

これらのホストでAnsibleを使用する:

プロジェクトディレクトリ内から、でansible定義したホストで通常どおり使用できるようになりますVagrantfile。

例えば:

ansible slave -a 'hostname'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.