毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。
ニフクラといえば、日本の国産クラウドとして頑張っている会社さんです。
今回は、CLIから(本当はGitLabパイプラインから)ニフクラサーバーのインスタンスを
起動するというスクリプトを書いていて、めっちゃはまった(恨み)のでそれを解消するために
記事を書いておこうと思います。
0. 発端
ニフクラさんの環境を使ってハンズオンセミナーをさせていただいております。
Kubernetes 実践入門ハンズオン - connpass
https://k8s-introduction.connpass.com/
当然、ハンズオンなので仮想マシンインスタンスを必要とするわけです。
1回目、2回目ぐらいまでは参加者30人分のインスタンスをえっこらえっこら立てていたわけですが、
さすがにもうしんどくなってきましたので自動化しようと重い腰を上げたわけです。
Ansibleで、とかとも考えたのですが、問題がありましてシェルスクリプトで実装しようと
しているのが事の発端でございます。これ以上迷える子羊が増えないように書いておきます。
1. 結論
コマンドは実行できる環境になっているとする
公開鍵をid_rsa.pubとする
$ nifty-import-keypair <任意6文字以上の鍵名> --request-method POST --public-key-material "$(base64 id_rsa.pub | tr -d '\n')"
KEYPAIR <任意6文字以上の鍵名> 7d:52:14:86:7e:77:eb:74:19:85:55:0e:b9:87:00:35
で登録できました...。
2. 注意点
2-1. --request-method POST を指定
これはコマンドのエラーメッセージが出るとおりにPOSTにしてください。
2-2. --public-key-material の指定方法
クラウド CLI(nifty-import-keypair) | ニフクラ
https://pfs.nifcloud.com/api/cli/nifty-import-keypair.htm
には、base64エンコードされた公開鍵の文字列を指定します。
と書いてあります。
これを見て
「はあ、SSHの公開鍵の形式にはいくつかあるものな、BASE64形式にする必要があるのか」
と思ってしまったのが迷走の始まりでした。
しかし、そんなことは全くなく通常のssh-keygenで出力されるOpenSSH形式をbase64でエンコード
するだけで良かったのです。
1の結論では、id_rsa.pubをbase64して改行コードを削除しています。
base64 id_rsa.pub | tr -d '\n'
2-3. 鍵名は6文字以上にする
6文字以上にしてください。
3. 泣き言
ただbase64にすればいいなんて、そんなこと思わないじゃないですか、
PEM形式にしたりいろいろやっちゃいましたよ(涙)