もうLDAPにさよなら?SSHログインの公開鍵をGitHubから取得する方法

今日は簡単なシェルスクリプトでGitHubから公開鍵を取得してSSHログインを行う方法を紹介したいと思います。
ポイントとしてはsshd_configで以前紹介したAuthorizedKeysCommandを利用すること、
次にGitHubはhttps://github.com/<user_name>.keysで登録されている公開鍵を取得できる仕組みを利用します。
設定例はCentOSを前提に記載しています。

事前準備

GitHubから公開鍵を取得する際にAPIを利用します。
APIの利用にはトークンが必要なためこちらの手順に沿ってトークンを取得して下さい。
またcurl,jqコマンドを利用するため、インストールが必要です。

yum -y install curl jq

設定例

  • /etc/ssh/sshd_config
~
PubkeyAuthentication yes
AuthorizedKeysCommand /usr/local/bin/git_auth.sh
AuthorizedKeysCommandUser root
~
  • /usr/local/bin/git_auth.sh
#!/bin/sh
curl -s -u "<username>:<token>" https://api.github.com/users/$1/keys | jq -r '.[].key'

ログインする

これだけでOSにユーザーが存在していれば公開鍵ログインできてしまいます。

$ ssh pyama@example.com
Last login: Wed Sep 16 11:25:48 2015 from examle.com

[pyama@example.com ~]$

このケースですとログイン先のサーバにOSにpyamaユーザーが存在しなければログインすることは出来ません。
これがある意味ログイン制御になるのですが、GHEなどを導入しているとか、IP制御で社外からアクセス出来ないとか、
ログイン自体の制限をする必要がない場合は、強気にこういったシェルでも良いのではないでしょうか。

  • /usr/local/bin/git_auth.sh
#!/bin/sh
useradd $1 >/dev/null 2>&1
mkpasswd -l 8 $1 >/dev/null 2>&1  # コンソールログインをしない想定でランダムなパスワードを設定
curl -s -u "<username>:<token>" https://api.github.com/users/$1/keys | jq -r '.[].key'

まとめ

LDAPを導入した場合と比べ、ログイン可能ユーザー制御など細かいことは出来ませんが(やろうと思えば出来なくもない)、
パスワードログインをとにかく撲滅して、楽に公開鍵SSHログインしたいケースでは便利なのではないでしょうか。