Ansibleで自動スクリプトをセットアップして新しいサーバーを設定しようとしていますが、ssh-copy-id
を使用してAnsibleマスターサーバーを新しいサーバーの承認済みsshキーに追加しています。
ssh-copy-id
を使用するスクリプトを作成しましたが、そのコマンドは新しいサーバーのパスワードを要求しています。
スクリプトで自動化できるように、同じ呼び出し行でそのパスワードを指定することはできますか?
これは、既知のsshキーなしで新しいDebianホストをプロビジョニングするために使用する方法です。このハンドブックをそのまま使用するには、ホストにpython
およびpython-apt
パッケージがインストールされている必要があります。 VMでテストする場合は、ブートパラメータurl=drybjed.github.io
を指定してDebianインストーラを実行できます。インストーラはpython
およびpython-apt
パッケージが選択されたpreseedファイルをダウンロードします(とりわけ)。インストール後、rootアカウントのデフォルトのパスワードはdebian
になり、最初のログイン時にパスワードを変更する必要があります。
インストールと最初のログイン後:
init.yml
を作成します:
hosts: all
user: root
Sudo: no
tags: init
vars:
- ssh_user: $ENV(USER)
tasks:
- name: INIT | Create admin system group
group: name=admins system=yes state=present
tags: init
- name: INIT | Create admin account from current user
user: name=$ssh_user state=present Shell=/bin/bash groups=admins
tags: init
- name: INIT | Make sure essential software is installed
apt: pkg=$item state=latest install_recommends=no
with_items:
- python
- python-apt
- Sudo
tags: init
- name: INIT | Install ssh public key from current account
authorized_key: user=$ssh_user key="$FILE(~/.ssh/id_rsa.pub)"
tags: init
- name: INIT | Install sudoers file for admin accounts
lineinfile: "dest=/etc/sudoers.d/admins state=present create=yes regexp='^%admins' line='%admins ALL=(ALL:ALL) NOPASSWD: SETENV: ALL' owner=root group=root mode=0440"
tags: init
ansible-playbook -k -l Host init.yml
でAnsibleを実行します。 Ansibleはrootパスワードを要求し、Sudoにアクセスできるシステムadmins
グループを作成し、現在のユーザーに基づいてユーザーアカウントを作成し、~/.ssh/id_rsa.pub
を新しいアカウントにコピーして、admins
グループに追加します。
これからは、Sudoを使用してユーザーアカウントからAnsibleを使用できるようになります。
expect
でダーティハックを試すこともできますが、それだけです。ダーティハックです。
プロビジョニングされたばかりのホストに公開鍵を設定する正しい方法は、そのステップをプロビジョニング自体に追加することです。つまり、pressed
、kickstart
、またはプロビジョニングに使用するカスタムメソッドにそのステップを含めます。ホスト。