下記の記事を見て、ssh の AuthorizedKeysCommand を知りました。
AuthorizedKeysCommand にコマンドを指定すると、コマンドの実行結果として公開鍵を渡すことができるらしい。
OpenSSH 6.2を使って公開鍵認証もLDAPで行いたい。
そこで、AWSのIAMユーザにSSH公開鍵を登録して、その鍵で、SSHログインできるか試してみました。
1.IAMユーザにssh公開鍵を登録
まず、キーペアを作成します
[root@centos701 ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:yU9NjtIMq8a9LJhNboxtZ2gxcEcLQTFNROj3ETvlMBU root@centos701 The key's randomart image is: +---[RSA 2048]----+ | .=O+ .E. | | o.o + . | | . o.. B. | | . o.+*+=. | | o oS.=oo | | .+o +. | | X++. . | | +.@.o. | | + +o | +----[SHA256]-----+
~/.ssh に公開鍵(id_rsa.pub)と秘密鍵(id_rsa)ができます。
[root@centos701 ~]# ls ~/.ssh/id* /root/.ssh/id_rsa /root/.ssh/id_rsa.pub
AWSコンソールでIAMユーザに上記で作成した公開鍵を登録します。
今回使用するIAMユーザは user01 です。
IAMユーザの[認証情報]タブで、[SSH公開キーのアップロード]ボタンをクリックします。
下図のように、作成した公開鍵をコピー&ペーストして、[SSH公開キーのアップロード]ボタンをクリックします。
下図のようにSSH公開鍵が登録されます。
2.SSH公開鍵取得スクリプトの用意
IAMユーザのSSH公開鍵を取得するスクリプトを用意します。
AuthorizedKeysCommand に設定して、sshd から実行されると、引数にユーザが渡されます。
スクリプト名は、/usr/local/sbin/aws_ssh_key.sh とし、内容は以下のようにしました。
テスト環境が、VirtualBoxなのでアクセスキーを設定していますが、
EC2インスタンスにロールを設定すれば、アクセスキーの設定は不要です。
[root@centos701 ~]# cat /usr/local/sbin/aws_ssh_key.sh #!/bin/bash export AWS_ACCESS_KEY_ID=<アクセスキー> export AWS_SECRET_ACCESS_KEY=<シークレットアクセスキー> export AWS_DEFAULT_REGION=ap-northeast-1 LOG=/tmp/debug.log exec > >(tee ${LOG}) 2>&1 user=$1 id=`aws iam list-ssh-public-keys \ --user-name "${user}" \ --query "SSHPublicKeys[?Status=='Active'].[SSHPublicKeyId]" \ --output text` aws iam get-ssh-public-key \ --user-name ${user} \ --ssh-public-key-id "${id}" \ --encoding SSH \ --query "SSHPublicKey.SSHPublicKeyBody" \ --output text
[root@centos701 ~]# chmod +x /usr/local/sbin/aws_ssh_key.sh
試しに動かしてみます。
以下のように、引数に user01 を指定して、上記1で登録した公開鍵が表示されたらOKです。
[root@centos701 ~]# /usr/local/sbin/aws_ssh_key.sh user01 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFcuCzHvzR3epwYjydZ+ge0mpXLfjV69fG9JbS2xAdfh5LGKOXnUKyFPFzZHIS31yg0wQBgzISaR4r3uPJ6WePh2Kx3LgX/cJoUCeKfVWPngoxyvu7f4wOlgehP8RCQ4Fs3OoCIlaT56zJYLR+r6hirdGoAdi3gq5Tp42628V5aMSyWCFn2k3LGZJOsUfEfjHWWeOQsujKjv/XlXoBFIf5p4kwClzV31KOtMex5CeuM0QPmJM2syjONmJ1WqARVRZgLuuXMkdD0cYlBSQd2gMf4ujf/CIuXirYNuyG3BY4tJFbFRHCKsXqzc1FvvVaU2+fJBwxsq/jtBGEXdFeCcp9
3. sshd_config の設定
/etc/sshd/sshd_config を下記のように修正します。
CentOS7の場合は、コメントアウトされていたので、# を削除して設定します。
AuthorizedKeysCommand /usr/local/sbin/aws_ssh_key.sh AuthorizedKeysCommandUser nobody
sshd を reload します。
[root@centos701 ~]# systemctl reload sshd
4. ssgログインの動作確認
サーバには、IAMユーザと同じ名称でユーザを用意します。
user01の公開鍵は、サーバには設定していません。
[root@centos701 home]# id user01 uid=1000(user01) gid=1000(user01) groups=1000(user01) [root@centos701 home]# ls -al /home/user01 合計 20 drwx------ 2 user01 user01 92 2月 25 00:18 . drwxr-xr-x. 5 root root 47 2月 25 00:20 .. -rw------- 1 user01 user01 15 2月 25 00:18 .bash_history -rw-r--r-- 1 user01 user01 18 9月 7 2017 .bash_logout -rw-r--r-- 1 user01 user01 193 9月 7 2017 .bash_profile -rw-r--r-- 1 user01 user01 231 9月 7 2017 .bashrc -rw-r--r-- 1 user01 user01 334 9月 20 2017 .emacs
上記1で作成した、秘密鍵でログインします。
[root@centos701 ~]# ssh -i .ssh/id_rsa -l user01 localhost Last login: Sat Jul 7 20:27:09 2018 from localhost
下記の記事と、組み合わせると、いいかもしれない。
AuthorizedKeysCommandを使うと、記事の authorized_keysの作成は不要になります。
IAMで踏み台ホストのユーザーとSSH公開鍵を一元管理する