3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ansible で ssh ログインできるユーザを作成する。

Last updated at Posted at 2021-06-28

これはなに?

単体で使える ansible-playbook の紹介です。
サーバで ssh ログインできるユーザを作成するものです。

主に Jenkins ノード用ユーザやデプロイ用ユーザの作成に利用できると思います。

ファイルは?

main.yml

- hosts: localhost
  connection: local
  become: yes
  vars:
    user_name: jenkins_worker
    group_name: ...
  tasks:
    - name: Useradd {{user_name}}
      user:
        name: "{{user_name}}"
        group: "{{group_name}}"
        generate_ssh_key: yes
        home: /var/lib/{{user_name}}
    - name: Allow {{user_name}} to ssh
      copy:
        src: /var/lib/{{user_name}}/.ssh/id_rsa.pub
        dest: /var/lib/{{user_name}}/.ssh/authorized_keys
    - name: Add user "{{user_name}}" to sudo
      lineinfile:
        path: /etc/sudoers.d/{{user_name}}
        line: '{{user_name}} ALL=(ALL) NOPASSWD: ALL'
        state: present
        mode: 0440
        create: yes
        validate: 'visudo -cf %s'

いくつか解説があります

1. local 接続している

hosts, connection でローカル接続設定をしています。
Ansible はリモートのPCへ実行することもできるので、その際はそれぞれ変更します。

2. ユーザ作成部分

    - name: Useradd {{user_name}}
      user:
        name: "{{user_name}}"
        group: "{{group_name}}"
        generate_ssh_key: yes
        home: /var/lib/{{user_name}}

ユーザは Ansible 標準の User モジュールで作成しています。
generate_ssh_key の設定で ssh キーを作成するようにしています。

3. authorized_keys 作成部分

ユーザのホームディレクトリに .ssh/authorized_keys に公開鍵を登録することで外部から ssh ログインができるようになります。
copy モジュールで .ssh/id_rsa.pub.ssh/authorized_keys にコピーしています。

4. 追加したユーザが sudo できるようにする

今回は Jenkins のノードになるようなユーザを作っています。
ジョブ内で sudo を使うことがあるので sudo をパスワードなしで実行できるようにします。

方法としては、「/etc/sudoers に設定を追加する」または「/etc/sudoer.d/ ディレクトリ以下に設定を含むファイルを追加する(/etc/sudoers#includedir /etc/sudoers.d の記載が必要)」があります。
今回は後者の方法を選んでいます。

lineinfile モジュールはファイルに文字列を追加するモジュールです。
複数回実行しても重複なく文字列を追加できます。(冪等性)

実行方法は?

今回はローカルなので以下のように実行できます。

sudo ansible-playbook --connection=local main.yml

ssh ログインするには?

作成したユーザの秘密鍵をクライアントにコピーします。
id_rsa というファイルにした場合、以下のコマンドで ssh ログインできます。

ssh -i id_rsa -l jenkins_worker localhost

今回はサーバでユーザと鍵を生成しましたが、秘密鍵をコピーして渡すのがよろしくないときはクライアントで鍵を作って公開鍵を渡す方法の検討が必要です。

参考

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?