5
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 3 years have passed since last update.

とりあえずAnsibleから鍵認証するための手順

Last updated at Posted at 2020-06-01

はじめに

Ansible から対象ホストに対してSSHで接続するための手順です。
え?「それをAnsibleでやるべき」だって?そんなものは後だ!

とりあえず前提

  • Ansible側も対象ホスト側もRHELを使用
  • Ansibleはインストール済み

とりあえず準備手順

Ansible側の作業

と言ったもののAnsible側で特に何かやる必要は無く、普通に鍵認証が設定されていればOKです。
すでに鍵認証設定が完了している場合は、ページの下の方だけ見てください。


まずはAnsible側で公開鍵と秘密鍵を作成。
(ここでは"ansi-user"というユーザで進めます)

$ ssh-key -t rsa

Enter file in which to save the key:と聞かれるので、そのままEnter。
次にEnter pssphrase (empty for no passphrase):と聞かれるのでパスフレーズを入力
Enter same passphrase again:で、先程と同じパスフレーズを入力します。

上記のコマンドを実行すると、/home/ansi-user/.sshにid_rsa(秘密鍵)とid_rsa.pub(公開鍵)が作成されます。

秘密鍵はどこに配置しても良いので、今回は移動せずに使用します。
配置はどこでも良いのですが、パーミッションの変更は必要なので、以下のコマンドを実行します。

$ chmod 600 ~/.ssh/id_rsa

対象ホスト側の作業

その後、対象ホストにログインしてansi-userを作成します。

$ useradd ansi-user

そして、鍵認証に必要なディレクトリとファイルを用意

$ su ansi-user
$ mkdir -p /home/ansi-user/.ssh
$ chmod 700 /home/ansi-user/.ssh
$ touch /home/ansi-user/.ssh/authorized_keys
$ chmod 600 /home/ansi-user/.ssh/authorized_keys

.sshディレクトリが作成できたら、Ansible側のid_rsa.pubを対象ホストの/home/ansi-user/.sshにコピーして、authorized_keysの末尾に追加します。

$ cat /home/ansi-user/.ssh/id_rsa.pub >> /home/ansi-user/.ssh/authorized_keys

AnsibleではSudo権限も必要なので、対象ホスト側のvisudoを編集します。

# visudo

末尾に以下の文字列を追加。

ansi-user ALL=(ALL) NOPASSWD:ALL

疎通確認

ここまでやれば普通にSSHで接続できるので、試してみましょう。

$ ssh -l ansi-user -i /home/ansi-user/.ssh/id_rsa [対象ホスト名 or IPアドレス]

上記のコマンドでログインできれば準備は完了です。

AnsibleでSSH接続

疎通確認

まずはAnsibleでも疎通確認をしてみましょう。
(hostsはInventoryファイルです。別名で利用している場合は適宜変更してください)

$ ansible [対象ホストのIPアドレス] -m ping -i hosts -u ansi-user --private-key="/home/ansi-user/.ssh/id_rsa"

下記のようなメッセージが返ってこれば疎通確認も完了です。

[対象ホストのIPアドレス] | SUCCESS => {
    ・・・(ここに何か記述されるかも知れません)
    "changed": false,
    "ping": "pong"

playbookコマンドを投げる

それでは遂にplaybookコマンドを投げてみます。
(playbook.ymlはplaybookファイルです。別名で利用している場合は適宜変更してください)

$ ansible-playbook -i hosts playbook.yml -u ansi-user --private-key="/home/ansi-user/.ssh/id-rsa"

上記のコマンドで問題なくplaybookコマンドが実行されれば完了です。

ssh-agentに秘密鍵を登録する

上記のコマンドだと、発行毎に毎回パスフレーズを入力する必要がありますが、そんな事してられない方はssh-agentに秘密鍵を登録してください。

$ ssh-add ~/.ssh/id_rsa

上記のコマンドを入力するとパスフレーズを聞かれますので、入力してください。
注意:再起動する毎に、初回接続時にパスフレーズを聞かれます

Could not open a connection to your authentication agent.と怒られる場合

ssh-agentを起動してやる必要があります。

$ ssh-agent

または(↑だと失敗する場合は)

$ eval `ssh-agent`

と入力してください。
その後、ssh-addを実行すれば行けると思います。

秘密鍵を登録した後は

$ ssh [対象ホスト]

$ ansible-playbook -i hosts playbook.yml

のみでSSH接続する事が可能です。多分。

初回ログイン時に「The authenticity of host ...」と言われたく無い人向け

段々脱線してきてますな。

それはさておき、sshで ~/.ssh/known_hosts にないマシンにアクセスする場合

The authenticity of host '[対象ホスト] (IPアドレス)' can't be established.
RSA key fingerprint is (略).
Are you sure you want to continue connecting (yes/no)?

と聞かれる事があります。
このメッセージが表示されるのが煩わしい時は、~/.ssh/configに下記の設定を書くことで抑制できます。

~/.ssh.config
host [対象ホストのIPアドレス]
  StrictHostKeyChecking no

また、~/.ssh/configはパーミッション600にしてやる必要があります。

$ chmod 600 ~/.ssh/config

以上。お目汚し失礼しました。

5
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
5
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?