EC2 (CentOS7) にSSH接続用のユーザーを追加する

AWS上に作成したLinuxで新規ユーザーを利用する場合、ユーザー作成に加えて、公開鍵と秘密鍵のキーペアを作成する必要があります。接続時に公開鍵暗号方式の電子署名を利用したユーザー認証をおこなうからです。大雑把には下図のようなイメージです。この記事ではユーザー作成からキーペアを作成して接続するまでの一連の手順を解説します。

ユーザーの作成

まずは次のコマンドで「user1」を作成します。

# useradd user1

オプションを付けなくてもホームディレクトリが合わせて作成されます。

#ls /home
centos user1

キーペアの作成

1. 事前に作成したユーザーにスイッチします。

#sudo su – user1

2. ssh-keygenキーでキーペアを作成します。
※「.ssh」ディレクトリは無ければ作成されますので事前の作成は不要です。

[user1@ip-xx-x-xx-xx ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user1/.ssh/id_rsa): 何も指定せず [enter]
Created directory ‘/home/user1/.ssh’.
Enter passphrase (empty for no passphrase): 何も指定せず [enter]
Enter same passphrase again: 何も指定せず [enter]
Your identification has been saved in /home/user1/.ssh/id_rsa.
Your public key has been saved in /home/user1/.ssh/id_rsa.pub.
<以下略>

3. 秘密鍵(id_rsa)と公開鍵(id_rsa.pub)が生成されたことを確認します。

[user1@ip-xx-x-xx-xx ~]$ cd /home/test/.ssh/
[user1@ip-xx-x-xx-xx .ssh]$ ls
id_rsa
id_rsa.pub

手順どおりに実施していれば、現在は下図のような状態になっているはずです。

秘密鍵のダウンロードと削除

さて冒頭でも説明しましたが、秘密鍵はクライアント側で保有し、公開鍵はサーバー側で保有します。従って次の2つの手順を実施する必要があります。

1. 秘密鍵をクライアントPCにダウンロードする。
catコマンドで秘密鍵ファイルを開いて、内容をメモ帳に貼り付けて保存します。
※ファイル名は何でも構いませんが、拡張子は .pem にしましょう。

[user1@ip-xx-x-xx-xx .ssh]$ cat id_rsa
(ここから)
—–BEGIN RSA PRIVATE KEY—–
MIIEowIBAAKCAQEA5irTTCJwkmU4x5JzPMyASW8kMJWP+7+bRWgCSFkfYaPlGgY3
Mk+Ybw+IubHaVEJgYYG2Lb3JH9yIE2Q1rYj3NqGWtJcUnKgh+7odxTDy9D6N7X8p
<中略>
eZ4GBQKBgHt4fU5+SN2HvwDGrlwY1xy4FttWJfMVsLI6OYjCCcow6fFGptnci2bp
lDgWS9j+MnXU1By5y1mZzoanNbhgjFkA3ShJryEzDmywIOTTK1kiGkKUn4OAnd4Y
ybKx6h2cYeKDf0E1UyCYNdOwv8ljdq84BfgXAszHeqwJV6lnIfsv
—–END RSA PRIVATE KEY—–
(ここまで)

2. 秘密鍵をサーバーから削除する。
秘密鍵はサーバー側では不要なので削除しましょう。セキュリティ上の理由です。

[user1@ip-xx-x-xx-xx .ssh]$ ls
id_rsa
id_rsa.pub
[user1@ip-xx-x-xx-xx .ssh]$ rm id_rsa
[user1@ip-xx-x-xx-xx .ssh]$ ls
id_rsa.pub

手順どおりに実施していれば、現在は下図のような状態になっているはずです。

公開鍵の名前の変更と権限変更

ここまでで一通りの作業が終わりましたが、最後にサーバ上の公開鍵の名前の変更と権限の変更をおこなう必要があります。

1.公開鍵の名前を変更する。

この公開鍵の名前を「id_rsa.pub」から「authorized_keys」変更する必要があります。理由は「/etc/ssh/sshd_config」に公開鍵のファイル名が「authorized_keys」として定義されているからです。

[user1@ip-xx-x-xx-xx .ssh]$ ls
id_rsa.pub
[user1@ip-xx-x-xx-xx .ssh]$ mv id_rsa.pub authorized_keys
[user1@ip-xx-x-xx-xx .ssh]$ ls
authorized_keys

2. 公開鍵のパーミションを変更する。

変更しなくても動作するのですが、デフォルトの644 (rw-r–r–) から、600 (rw——-)に変更することが推奨されています。セキュリティ上の理由です。

権限意味
644
rw-r–r–
自身は読み書き可能。グループメンバや他人は読み取りが可能。
600
rw——-
自身は読み書き可能。その他は一切アクセス不可。

以下の手順を実行しましょう。

[user1@ip-xx-x-xx-xx .ssh]$ chmod 600 authorized_keys

3. 「.ssh」ディレクトリのパーミション

これも同様です。デフォルトで700 (rwx——-) になっているはずですが、そうでなかった場合は、700に設定しましょう。

権限意味
700
rwx——
自身は読み書きおよび実行が可能。その他は一切アクセス不可。

[user1@ip-xx-x-xx-xx .ssh]$ ls -la
drwx——. 2 user1 user1 29 May 3 03:34 .ssh

手順どおりに実施していれば、現在は下図のような状態になっているはずです。

接続確認

さて、これでサーバ側の設定はすべて完了しました。最後に接続確認をしましょう。「Private Key file」にはダウンロードして秘密鍵(xxx.pem)を指定します。

補足1(sudo権限とパスワードの付与)

1. パスワード付与

上記の手順を踏めば、パスワードを設定せずにOSにログインできるようになりますが、パスワードありの「sudo」を実行させたい場合はパスワードを設定してあげてくささい。

[root@ip-XX-X-XX-XX ~]#passwd user1
Changing password for user user1.
New password: パスワードを入力
Retype new password: パスワードをもう1度入力
passwd: all authentication tokens updated successfully.

2. sudo権限の付与

また、sudo権限を付与するには「visudo」コマンドを実行します。決してviコマンドで/etc/sudoersを編集しないでください。編集ミスがあるとsudoできなくなります。sudoersファイルを修正するのにsudoが必要なので、2度とsudoできなくなります。
「visudo」コマンドの場合は変更を保存する際に文法チェックが入り、間違っている場合は警告が表示されます。

[良い例]

[root@ip-XX-X-XX-XX ~]#visudo

[悪い例]

[root@ip-XX-X-XX-XX ~]#vi /etc/sudoers

「visudo」コマンドを実行するとファイルの編集画面になるので、ルート配下に追加したいユーザーの分の設定を同様の形式で追記してください。

## Allow root to run any commands anywhere
root ALL=(ALL) ALL
user1 ALL=(ALL) ALL

補足2(userの削除)

作成したユーザーを削除する場合は 「userdel」コマンドを使います。rオプションを付けることで、ホームディレクトリも削除されるので、ゴミが残りません。

[root@ip-XX-X-XX-XX ~]# userdel -r user1

補足3 パスワードでログインできるようにしたい

/etc/ssh/sshd_config をviで開き、

[root@ip-XX-X-XX-XX ~]# vi /etc/ssh/sshd_config

以下のコメントアウトを解除します。

#PasswordAuthentication yes

その後、sshdを再起動します。

[root@ip-XX-X-XX-XX ~]# systemctl restart sshd

以上。

コメント