2017-02-14 5 views
0

私は、私たちのサーバーのネットワーク上で名前付きのsshアクセスを作成するために、安全な(バージョン2.1.2.0)を使用しようとしています。私は、ユーザーのセットを作成し、そこからユーザモジュール公開鍵を読み取ることができない許可されたキーモジュール

- user: 
     name: "{{ item }}" 
     shell: /bin/bash 
     group: usergroup 
     generate_ssh_key: yes 
     ssh_key_comment: "ansible-generated for {{ item }}" 
    with_items: "{{ list_of_usernames }}" 

と/秘密鍵と公開鍵のペアを作成していたジャンプボックスからansible実行私は、それぞれにauthorized_usersファイルに公開鍵を越えコピーしたいですリモートサーバー。私は、フェッチおよびリモートサーバー上authorized_keyとして、ユーザの生成した公開鍵をコピーするauthorized_key_moduleを使用しています:

- authorized_key: 
     user: "{{ item }}" 
     state: present 
     key: "{{ lookup('file', '/home/{{ item }}/.ssh/id_rsa.pub') }}" 
    with_items: 
     - "{{ list_of_usernames }}" 

私は何を見つけたんだけど、パブのファイルにアクセスすることができないとして、ルックアップが失敗するということですユーザーの.sshフォルダ内にあります。しかし、私がルートユーザー(私にとっては選択肢ではありません)を実行することができれば、それは楽しく実行されます。

fatal: [<ipAddress>]: FAILED! => {"failed": true, "msg": "{{ lookup('file', '/home/testuser/.ssh/id_rsa.pub') }}: the file_name '/home/testuser/.ssh/id_rsa.pub' does not exist, or is not readable"} 

root権限で実行する以外の方法がありますか?

編集:申し訳ありませんが、私は私が実行していることを言及するのを忘れていたのになる:はい

編集#2:以下はそれは、このインスタンスでは、もちろん、私が実行しようとしているものの凝縮脚本ですLLはlocalhostにauthorized_keyを追加しますが、私が直面していますエラーを示しています。

--- 
- hosts: all 
    become: yes 
    vars: 
    active_users: ['user1','user2'] 
    tasks: 

    - group: 
     name: "users" 

    - user: 
     name: "{{ item }}" 
     shell: /bin/bash 
     group: users 
     generate_ssh_key: yes 
    with_items: "{{ active_users }}" 

    - authorized_key: 
     user: "{{ item }}" 
     state: present 
     key: "{{ lookup('file', '/home/{{ item }}/.ssh/id_rsa.pub') }}" 
    become: yes 
    become_user: "{{ item }}" 
    with_items: 
     - "{{ active_users }}" 
+0

しかし、root権限を持たずに新しいユーザーを作成するにはどうすればよいですか? –

+0

申し訳ありませんが、私は質問を書いていたときにこれを書いたと思っていましたが、私は本当に使っています:はい – Aeladru

+0

そしてなぜあなたは次の仕事のために「なる:はい」できないのですか? –

答えて

2

問題は、検索プラグインで問題ありません。
ユーザーのアクセス許可がansible-playbookおよびbecome: yesである制御可能なホストで実行されても、プラグインのアクセス許可が昇格されません。この、userタスクのキャプチャ結果を克服し、さらに作業で、その出力を使用するには

:あなたはこの作業の一部を委任する必要がありますが

- user: 
    name: "{{ item }}" 
    shell: /bin/bash 
    group: docker 
    generate_ssh_key: yes 
    ssh_key_comment: "ansible-generated for {{ item }}" 
    with_items: 
    - ansible5 
    - ansible6 
    register: new_users 
    become: yes 

- debug: msg="user {{ item.item }} pubkey {{ item.ssh_public_key }}" 
    with_items: "{{ new_users.results }}" 

、考え方は同じになります。

+0

ありがとうございました。私はそれがルックアップを取り巻く権限と関係していたと感じましたが、かなり新しくなったので、このようなことは考えられませんでした。大変感謝しました – Aeladru

2

をほとんどのLinux/UNIXマシンのみ2つのアカウントが/home/testuser/.ssh/id_rsa.pubへのアクセスがあります。あなたがそれらのファイルを変更したいと思いますので、もし、roottestuserrootまたはtestuserのいずれかにする必要があります。

privilige escalationbecomeを使用してください。あなたは根源的なものを実行したくないと言っています。これは完璧です。あなたはあなたと一緒に実行しているユーザーがsudoアクセス権を持っているかどうかについて言及していません。それがないと、sudoを使用すると、あなたのための罰金であるなら、あなたは簡単に行うことができます:root以外のユーザーが実行したタスクの残りの部分を維持しながら、デフォルトで

- authorized_key: 
     user: "{{ item }}" 
     state: present 
     key: "{{ lookup('file', '/home/{{ item }}/.ssh/id_rsa.pub') }}" 
    with_items: 
     - "{{ list_of_usernames }}" 
    become: yes 

これは、sudoを使ってrootとして次のコマンドを実行します。これはまた、安全な人と一緒に走るのに好ましい方法です。

これを必要とせず、ユーザーをできるだけルートフリーにしたい場合は、コマンドをtestuser(および変更する他のユーザー)として実行する必要があります。これは、sudoersファイルにパッチを適用して、潜在的なユーザーがこれらのユーザーのいずれかに変更できるようにすることを意味します(ルートとして何かを実行することはできませんが、あなたが行うことができます。

- authorized_key: 
     user: "{{ item }}" 
     state: present 
     key: "{{ lookup('file', '/home/{{ item }}/.ssh/id_rsa.pub') }}" 
    with_items: 
     - "{{ list_of_usernames }}" 
    become: yes 
    become_user: "{{ item }}" 

あなたはこれを試す前に、ansibleのマニュアルの完全なPrivilege Escalationページ、Unpriviliged Usersで特にセクションを読みたいと思うかもしれませんので、このアプローチを使用して、いくつかの注意点があります。

+0

詳細な応答をありがとう、私はそれを釘付けにしたことを確かめるために、もう一度priviligesのドキュメンテーションを調べます。 rootとしてログインする必要がないように、特に名前付きアクセスを設定しようとすると、私はちょっと奇妙に思えました。 – Aeladru

関連する問題