#[SoftLayerクッキングLABO] (http://qiita.com/MahoTakara/items/464da29ccf932698b753)
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鍵の運用は、とても重要なポイントなので、参考になれば幸いです。