2017-05-31 9 views
1

リモートホストにソフトウェアをセットアップするためにsshを使用することは可能です。可能なプレイブックを正しい方法で複数のサーバーに実行するには?

新しくインストールされたマシンがいくつかインストールされている場合、リモートホスト上のauthorized_keysがないため、1つのホストからのAnuch Playbookを実行できません。

のようなものをターゲットホストにAnsibleホストのパブのキーをコピーする場合:

$ ssh [email protected] "echo \"`cat .ssh/id_rsa.pub`\" >> .ssh/authorized_keys" 
まずログインをSSHおよびすべてのリモートホスト上のファイルを作成する必要があり

$ mkdir .ssh 
$ touch .ssh/authorized_keys 

これを実行するための一般的な方法ですリモートサーバーへの可能なプレイブック?より良い方法が存在するか?

答えて

2

authorized_key moduleを使用しても、それはAnsibleを使用する方が良いと思います。たとえば、ユーザーrootのためのあなたの鍵を承認する:

- hosts: <NEW_HOSTS> 
    vars: 
    - username: root  

    tasks: 
    - name: Add authorized key 
    authorized_key: 
     user: "{{ username }}" 
     state: present 
     key: "{{ lookup('file', '/home/<YOUR_USER>/.ssh/id_rsa.pub') }}" 

として実行:

ansible <hosts> -m authorized_key -a "user=root state=present key=\"$(cat ~/.ssh/id_rsa.pub)\"" --ask-pass 

これはそのrootデフォルト変数として、ターゲットユーザーと、また脚本で行うことができます。

ansible-playbook auth.yml --ask-pass -e username=<TARGET_USER> 

becameを使用しない場合はお使いのユーザーは、権限を持っている必要があります。

+0

このように、 '--ask-pass'は最初のホストのパスワードを尋ねることができます。異なるパスワードを持つ複数のホストがある場合、動作しません。 –

+0

それは本当です。とにかく、手動でログインして公開鍵を読み込むよりも優れていると思います。異なるホストに対して最初のコマンドを複数回使用することもできますし、事前定義されたログインで新しいサーバーを作成する方法を見つけることもできます。 VM用のPackerやベアメタル用の事前設定など、これを取得するツールがあります。 – charli

+1

ありがとうございます。 'anals_ssh_pass'変数を' hosts'ファイルに追加しました。私はそこに複数のホストのパスワードを設定しました。その後、ルートプレイブックから 'auth.yml'をインクルードしてください。それは今私にとって良い解決策です。 –

関連する問題