みなさんこんにちは。技術5課の佐野です。
最近は18年ぶりに刊行された十二国記の新刊を、時間をみつけてはちまちま読んでます。
感想の共有はネタバレしない程度に、いつでもお待ちしております!
さて、みなさんはAWSのEC2でLinuxインスタンスを立てたとき、こんなことはありませんか?
- 外部の人に一時的に入ってもらうために踏み台サーバを作ったけど、インスタンス作成時に内部用のキーペアで作成してしまった
- セキュリティが気になるので、内部用のキーペアを外に出したくない
- かといって、パスワード認証のユーザは作りたくない
そんなときに「SSH公開鍵認証のユーザを作成する」のがいちばんなのですが、Linux初心者だとちょっとハードル高そうですよね。わたしもそう思ってました。
そこでなるべく初心者にやさしく、SSH公開鍵認証のユーザを作成する手順を書いてみました!
- 前提条件
- newuserの作成
- 認証鍵ディレクトリの作成
- キーペアから公開鍵を取り出す
- newuserに公開鍵を登録する
- newuserのログイン確認
- newuserにsudo権限をつける
- [補足]PuTTYgenで秘密鍵と公開鍵のどちらも作成する
- おわりに
前提条件
- 対象OSはAmazon Linux 2とします
- ec2-userと対応するキーペアでEC2インスタンスにログインできる状態にあることとします
- PuTTYが作業環境にインストールされている、もしくは使える環境があることとします
- 作成するユーザ名は「newuser」とします
- ユーザ名「newuser」にログインするためのキーペアは「newuser.pem」とします(※)
※newuserに設定するキーペア「newuser.pem」は、
AWSマネージドコンソールで新規にキーペアを作成する想定です。
AWSマネージドコンソールまたはAWS CLIを利用できない環境では、
PuTTYgenで秘密鍵と公開鍵を作成できます。詳しくは補足の手順をご覧ください。
newuserの作成
Amazon Linux 2にec2-userでログインし、newuserユーザを作成します。
[ec2-user ~]$ sudo adduser newuser
認証鍵ディレクトリの作成
ec2-userからnewuserにスイッチユーザして切り替えます。
[ec2-user ~]$ sudo su - newuser
[newuser ~]$
SSHキーファイル用のディレクトリをnewuserのホームディレクトリに作成し、
そのファイルのアクセス許可を 700 (所有者のみ、読み取り、書き込み、削除が可能) に変更します。
[newuser ~]$ mkdir .ssh
[newuser ~]$ chmod 700 .ssh
authorized_keys という名前のファイルを .ssh ディレクトリに作成し、
そのファイルのアクセス許可を 600 (所有者のみ、読み取りおよび書き込みが可能) に変更します。
[newuser ~]$ touch .ssh/authorized_keys
[newuser ~]$ chmod 600 .ssh/authorized_keys
キーペアから公開鍵を取り出す
(1)PuTTYインストール時に一緒に入る、PuTTYgenを起動し、「Load」ボタンよりキーペア「newuser.pem」を読み込みます。
(2)「Key Comment」にキーペアの名前「newuser」を入れておきます。
(3)「Key」欄に公開鍵が表示されるので、これをテキストエディタ等に控えておきます。
newuserに公開鍵を登録する
先ほどの手順2でログアウトしてしまった場合は、もう一度ec2-userログインし、newuserへスイッチユーザします。
.ssh/authorized_keysをお好みのテキストエディタで開きます(ここではviとします)。
[newuser ~]$ vi .ssh/authorized_keys
キーボードi
を押して挿入モードにし、手順3で控えた公開鍵を貼り付けます。
その後、キーボードEsc
を押してコマンドモードに戻し、:wq
を入力して保存します。
newuserのログイン確認
いったんEC2インスタンスからログアウトします。
[newuser ~]$ exit
[ec2-user ~]$ exit
ec2-userで入ったEC2インスタンスに、今度はnewuserユーザとキーペア「newuser.pem」でログインし、問題なくログインできることを確認します。
newuserにsudo権限をつける
ec2-userでEC2インスタンスに入りなおし、rootにスイッチユーザします。
[ec2-user ~]$ sudo su -
/etc/sudoers.d/90-cloud-init-usersファイルの中身を確認します。
おそらく、ec2-userの記載のみになっているかと思います。
[root ~]$ cat /etc/sudoers.d/90-cloud-init-users
# Created by cloud-init v. 18.5-2.amzn2 on Tue, 05 Nov 2019 02:42:21 +0000
# User rules for ec2-user
ec2-user ALL=(ALL) NOPASSWD:ALL
# User rules for ec2-user
ec2-user ALL=(ALL) NOPASSWD:ALL
viコマンドを使用し、newuserにも同じ権限をつけるように追記します。
viでの編集方法は、手順4でやった要領と同じです。(保存時のコマンドに:wq!
と入力を求められることがあります)
[root ~]$ vi /etc/sudoers.d/90-cloud-init-users
# Created by cloud-init v. 18.5-2.amzn2 on Tue, 05 Nov 2019 02:42:21 +0000
# User rules for ec2-user
ec2-user ALL=(ALL) NOPASSWD:ALL
newuser ALL=(ALL) NOPASSWD:ALL
# User rules for ec2-user
ec2-user ALL=(ALL) NOPASSWD:ALL
newuser ALL=(ALL) NOPASSWD:ALL
編集した内容をcatで開いて確認します。
[root ~]$ cat /etc/sudoers.d/90-cloud-init-users
rootユーザからnewuserにスイッチユーザし、sudoコマンドが発行できるか確認します。
以下の例では、ec2-userと同じくrootユーザにスイッチできるかを確かめています。
[root ~]$ su - newuser
[newuser ~]$ sudo su -
ここまでで、newuserを作成して、ec2-userと同じログイン方法と権限を与えることができました!
[補足]PuTTYgenで秘密鍵と公開鍵のどちらも作成する
(1)PuTTYインストール時に一緒に入る、PuTTYgenを起動し、「Generate」ボタンをクリックします。
(2)「Key」欄にゲージが現れるので、マウスをぐるぐる動かして完了させます。とにかくマウスを動かすことが肝心です!
(3)完了すると以下の画面になるので、「Key Comment」にキーペアの名前「newuser」を入れておきます。
(4)「Key」欄に公開鍵が表示されるので、これをテキストエディタ等に控えておきます。
もしくは、「Save public key」ボタンでダウンロードしましょう。
(5)「Save private key」ボタンで秘密鍵をダウンロードします。
PuTTYgenで秘密鍵を作ったときは、「newuser.ppk」などのppkファイルとなります。
おわりに
いかがでしたでしょうか?「初心者でも意外と簡単だな」と思ってもらえると嬉しいです。
それでは、セキュアで楽しいクラウドライフをお過ごしくださいませ。
佐野 史織 (記事一覧)