Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Chef 対象サーバーと knife サーバーの鍵共有

More than 5 years have passed since last update.

SoftLayerクッキングLABO

Chef-Solo や Chef-Zero を利用する場合には、必ず SSH でリモートログインが実行されます。今回は SSH鍵のペアを生成して、登録する方法について、ご案内します。

SSH鍵の生成

鍵を保管しておくディレクトリを作っておく便利です。 少しでもタイプする量を減らしたいので sを省いてしまいます。

chef@ChefWs:~$ mkdir key
chef@ChefWs:~$ cd key

鍵のペアは、次のコマンドで作成できるのですが、-f オプションでファイル名を指定すると、目的別に判別しやすく便利です。
パスフェースを求めてくるのですが、何も入力せずに ENTERキーを押しています。 このパスフェースは秘密鍵ファイルを暗号化する鍵ためです。よって鍵ファイル流出に対して効果がありますが、サーバーを保護する上で差は出ないので、自動化や利便性の利益を優先して設定しません。

chef@ChefWs:~/key$ ssh-keygen -t rsa -f chefkey
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in chefkey.
Your public key has been saved in chefkey.pub.
The key fingerprint is:
5f:15:a7:32:53:50:5d:7e:25:20:28:0f:f0:e4:35:cc chef@ChefWs
The key's randomart image is:
+--[ RSA 2048]----+
|    ...oo.. o+=.=|
|     +o.E. . . *o|
|      o+    + o o|
|        .    =  .|
|        S   .    |
|         . .     |
|          .      |
|                 |
|                 |
+-----------------+

鍵保管のディレクには、二つのファイルが作られています。 pubが付いている方が公開鍵で SoftLayerの管理システムへ登録する方です。

chef@ChefWs:~/key$ ls -la
合計 16
drwxrwxr-x 2 chef chef 4096  9月 30 21:49 .
drwxr-xr-x 9 chef chef 4096  9月 30 21:47 ..
-rw------- 1 chef chef 1675  9月 30 21:49 chefkey
-rw-r--r-- 1 chef chef  393  9月 30 21:49 chefkey.pub

コマンドラインから SoftLayer への鍵登録

先に作成したSSHの鍵の公開鍵を SoftLayer の管理システムに登録しておき、物理サーバーや仮想サーバーをプロビジョニングする際に、root に対する鍵として、自動的に埋め込んでしまう様にします。このための登録は次のコマンドで実行します。slcliコマンドの最後のパラメータの chefkey は、カスタマーポータルに表示される時のラベル名です。

chef@ChefWs:~$ slcli sshkey add --in-file ~/key/chefkey.pub  chefkey
SSH key added: 5f:15:a7:32:53:50:5d:7e:25:20:28:0f:f0:e4:35:cc

登録した鍵を確認するには、以下のコマンドでリストとして表示することができます。

chef@ChefWs:~$ slcli sshkey list
:........:...........:.................................................:.......:
:   id   :   label   :                   fingerprint                   : notes :
:........:...........:.................................................:.......:
: 370981 :  chefkey  : 5f:15:a7:32:53:50:5d:7e:25:20:28:0f:f0:e4:35:cc :   -   :
:........:...........:.................................................:.......:

プロビジョニング時のSSH鍵の利用方法

登録したSSH鍵のid番号を次の様に、--key のパラメータとして id 番号をセットします。

#!/bin/bash
slcli vs create \
--hostname webap1 --domain softlayer.com \
--datacenter tok02 \
--cpu 1 --memory 1 \
--os UBUNTU_LATEST_64 \
--billing hourly \
--public \
--postinstall https://raw.githubusercontent.com/takara9/ProvisioningScript/master/ubuntu_basic_config \
--key 370981 \   #<<==== これ sshkey list の id 番号をココにセット
--network 100

このシェルを実行して、作成した仮想サーバーには、ssh で次の様に、対応する秘密鍵を指定して、パスワード無しでログインすることができます。最初だけ接続するか確認を求めてきます。

chef@ChefWs:~$ ssh 10.132.253.39 -l root -i ~/key/chefkey
The authenticity of host '10.132.253.39 (10.132.253.39)' can't be established.
ECDSA key fingerprint is 86:fa:26:39:22:0f:8f:40:fc:65:4f:ab:f3:62:3d:2e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.132.253.39' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-55-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
Last login: Wed Sep 30 22:11:52 2015 from 10.0.80.186

2回目移行は、インタラクション無しにログインできます。

chef@ChefWs:~$ ssh 10.132.253.39 -l root -i ~/key/chefkey
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-55-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
Last login: Wed Sep 30 22:13:15 2015 from 10.132.253.38
root@webap1:~# 

サーバーのOSをリロードしたり、サーバーをキャンセルした後に、同じIPアドレスが再利用された場合に、次の様なエラーが出ます。

chef@ChefWs:~/shells$ ssh 10.132.253.39 -l root -i ~/key/chefkey
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
db:d8:1a:4e:b3:19:06:87:b2:78:df:4d:35:bb:b4:91.
Please contact your system administrator.
Add correct host key in /home/chef/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/chef/.ssh/known_hosts:1
  remove with: ssh-keygen -f "/home/chef/.ssh/known_hosts" -R 10.132.253.39
ECDSA host key for 10.132.253.39 has changed and you have requested strict checking.
Host key verification failed.

こんな時は 次にコマンドで .ssh/known_hosts からエントリを削除して、再度登録しなおしとなります。

chef@ChefWs:~/shells$ ssh-keygen -R 10.132.253.39
# Host 10.132.253.39 found: line 1 type ECDSA
/home/chef/.ssh/known_hosts updated.
Original contents retained as /home/chef/.ssh/known_hosts.old

余談ですが、サーバーを初期化するためのシェルは以下になります。ここで、SSH鍵ファイルとプロビジョニング・スクリプトは毎回指定しなければなりません。 パラメータの最後の数字は、サーバーのID番号で、slcli vs list でサーバー名やIPアドレスと対比して見ることができます。

#!/bin/bash
slcli vs reload \
--postinstall https://raw.githubusercontent.com/takara9/ProvisioningScript/master/ubuntu_basic_config \
--key 370981 \
12933295

まとめ

Chefを必要とするエンジニアは、おおよそ、少ない人数で非常に多くのサーバーを構築や運営している事が殆どで、その様なエンジニアからするとカスタマーポータルの反応速度は許せない! そこで、slcliコマンドから、シェル化して高速に処理できる様にして、案内してきました。
SSH鍵の運用は、とても重要なポイントなので、参考になれば幸いです。

MahoTakara
Docker/Kuberneresの学習本を書きました。15ステップあるのですが、1ステップ完結型なので好きな所から学習できます。https://amzn.to/2mgCRya
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away