web-dev-qa-db-ja.com

2要素認証を使用したansiblessh接続

サーバーのファーム全体を管理できるように設定しています。私のアプローチは次のとおりです。

ユーザーが、重いRSAキー、パスフレーズで保護されたユーザーパスワードを使用して、接続を保護するすべてのサーバーに接続できるようにします。

プロセスを可能な限り自動化するために、RSAパスフレーズとユーザーパスワードをボールトファイルまたは暗号化された文字列で渡したいと思います。

クライアントで両方の認証方法(公開鍵+ユーザーパスワード)を設定した場合、テストサーバーにpingを実行するだけでテスト(パスワードを手動で渡す)すると、RSAパスフレーズの入力を求められますが、パスワードは表示されません。プレイブックの失敗。

認証方法としてユーザーパスワードを設定しただけでは、プレイブックは正常に実行されます。

パスフレーズ認証を使用してRSAキーを設定しただけでジョブが終了しない場合、これは画面に少なくとも30分間表示された出力です(調査、コーヒーなどの時間)。

PLAY [all] ******************************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************************
Enter passphrase for key '/home/users/<user_name>/.ssh/id_rsa': 
ok: [<test_server_ip_address>]

TASK [include vars] *********************************************************************************************************************************************************
ok: [<test_server_ip_address>]

TASK [test connection] ******************************************************************************************************************************************************

そして他の何でも。

私が実行しようとしているプレイブックはこれです

---
- hosts: all
  tasks:
    - name: test connection
      ping:

そして、playbokを実行するコマンドは次のものです:

ansible-playbook -i ansible_hosts/test_hosts.yml playbooks/ping.yml

test_Host.ymlの内容:

all:
  hosts:
    <test_server_ip_address>

私の質問は:

Ansibleに二要素認証を設定することは可能ですか?はいの場合、誰かが私を正しい方向にリダイレクトできますか?

1
Abel

Ansibleボールトからsshキーのパスフレーズを使用できるかどうかは疑問ですが、一般的な2要素ワークフローは次のとおりです。

サーバー側で、2要素認証を有効にします

AuthenticationMethods "publickey,password"

sshd_configで。

クライアント側(Ansible):

  1. Ssh-agentをセットアップし、接続が必要な場合はパスワードで保護されたキーをエージェントに追加します
  2. すべてのホストのAnsibleボールトでansible_passwordを定義します
  3. プレイブックを実行する
2