web-dev-qa-db-ja.com

パスワード付きの1行のssh-copy-id、可能ですか?

Ansibleで自動スクリプトをセットアップして新しいサーバーを設定しようとしていますが、ssh-copy-idを使用してAnsibleマスターサーバーを新しいサーバーの承認済みsshキーに追加しています。

ssh-copy-idを使用するスクリプトを作成しましたが、そのコマンドは新しいサーバーのパスワードを要求しています。

スクリプトで自動化できるように、同じ呼び出し行でそのパスワードを指定することはできますか?

2
shaharmor

はい、 期待 を使用して ループ でそれを行うことができます。

1
Petter H

これは、既知のsshキーなしで新しいDebianホストをプロビジョニングするために使用する方法です。このハンドブックをそのまま使用するには、ホストにpythonおよびpython-aptパッケージがインストールされている必要があります。 VMでテストする場合は、ブートパラメータurl=drybjed.github.ioを指定してDebianインストーラを実行できます。インストーラはpythonおよびpython-aptパッケージが選択されたpreseedファイルをダウンロードします(とりわけ)。インストール後、rootアカウントのデフォルトのパスワードはdebianになり、最初のログイン時にパスワードを変更する必要があります。

インストールと最初のログイン後:

  1. パスワードを使用してroot @ HostにSSH接続できることを確認してください(ホストフィンガープリントなどを受け入れます)。
  2. 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
    
  3. ansible-playbook -k -l Host init.ymlでAnsibleを実行します。 Ansibleはrootパスワードを要求し、Sudoにアクセスできるシステムadminsグループを作成し、現在のユーザーに基づいてユーザーアカウントを作成し、~/.ssh/id_rsa.pubを新しいアカウントにコピーして、adminsグループに追加します。

これからは、Sudoを使用してユーザーアカウントからAnsibleを使用できるようになります。

3
drybjed

expectでダーティハックを試すこともできますが、それだけです。ダーティハックです。

プロビジョニングされたばかりのホストに公開鍵を設定する正しい方法は、そのステップをプロビジョニング自体に追加することです。つまり、pressedkickstart、またはプロビジョニングに使用するカスタムメソッドにそのステップを含めます。ホスト。

0
dawud