💻

【AWS】Amazon Linux 2のSSH接続ユーザ追加とポート変更

2022/10/25に公開

こんにちは。川名(亮)です。

AWSのAmazon Linux 2のEC2インスタンスはデフォルトでec2-userというLinuxユーザが用意されており、通常はこのec2-userを利用してサーバの運用を行います。

しかし会社の運用ポリシーや複数社で運用する場合など、SSH接続ユーザを分けて利用したり、SSH接続ポートの変更が必要となるケースがあります。

今回はSSH接続ユーザの追加方法とSSH接続ポートの変更方法を説明します。

概要

  • SSHポート変更
  • セキュリティグループの設定変更
  • SSH接続テスト(ポート変更後)
  • SSH接続ユーザの追加
    • Linuxユーザの追加
    • sudoers設定ファイルの作成
  • SSH公開鍵/秘密鍵の設定
    • 公開鍵/秘密鍵の生成
    • 公開鍵のファイル名変更
    • 秘密鍵をローカルに保存
    • 秘密鍵の削除
  • 追加ユーザでSSH接続テスト
  • さいごに

SSHポート変更

対象のEC2インスタンスにログインし、viコマンドでsshdの設定ファイルを編集します。

$ sudo vi /etc/ssh/sshd_config

sshdのポート設定はコメントアウトされ、標準のTCP22ポートが利用されています。
今回はコメントアウトを外してTCP22000に変更します。

変更前
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
変更後
Port 22000
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

設定変更を反映するためsshdを再起動します。

■sshdの再起動
$ sudo systemctl restart sshd

■sshdの稼働確認
$ sudo systemctl status sshd

■sshdのポート確認
$ sudo ss -antup |grep ssh
tcp   LISTEN 0      128                            0.0.0.0:22000         0.0.0.0:*     users:(("sshd",pid=4373,fd=3))                       
tcp   ESTAB  0      52                         10.0.10.171:22    xxx.xxx.xxx.xxx:54163 users:(("sshd",pid=4247,fd=3),("sshd",pid=4230,fd=3))
tcp   LISTEN 0      128                               [::]:22000            [::]:*     users:(("sshd",pid=4373,fd=4))

「LISTEN」が「0.0.0.0:22000」となっていればTCP22000への変更が反映されています。
「ESTAB」のTCP22が表示されているのは既存のSSH接続が維持されているためです。

セキュリティグループの設定変更

AWSマネジメントコンソールで対象のEC2インスタンスに割り当てしているセキュリティグループの設定を変更します。

既存のTCP22の設定を削除し、新たにTCP22000の許可設定を追加します。

SSH接続テスト(ポート変更後)

TCP22000を利用してSSH接続できるか確認します。

SSH接続ユーザの追加

Linuxユーザの追加

SSH接続にはLinuxユーザが利用されます。
今回は「testuser」というLinuxユーザでSSH接続するようにします。

$ sudo useradd testuser

sudoers設定ファイルの作成

testuserでもec2-userのようにsudoが利用できるようにします。

■sudoers設定ファイルをコピー
$ sudo cp -a /etc/sudoers.d/90-cloud-init-users /etc/sudoers.d/100-cloud-custom-users

■コピーしたsudoers設定ファイルを編集
$ sudo visudo -f /etc/sudoers.d/100-cloud-custom-users

sudoers設定ファイルの変更内容は以下の通りです。

変更前
# User rules for ec2-user
ec2-user ALL=(ALL) NOPASSWD:ALL
変更後
# User rules for testuser
testuser ALL=(ALL) NOPASSWD:ALL

SSH公開鍵/秘密鍵の設定

公開鍵/秘密鍵の生成

testuserでSSH接続する際に利用する公開鍵/秘密鍵を生成します。
生成時の設定項目については後述のテーブルを参考にして下さい。

■testuserに切り替え
$ sudo su - testuser

■公開鍵/秘密鍵を生成(testuserで実行すること)
$ ssh-keygen
設定項目 設定値
Enter file in which to save the key (/home/testuser/.ssh/id_rsa): 鍵ファイルを保存する場所です。デフォルトのまま利用するので何も入力せずEnterキーを押します。
Enter passphrase (empty for no passphrase): 秘密鍵にパスワードを設定します。何も入力せずEnterキーを押すとパスワード無しの鍵となります。パスワードを設定した場合SSHログイン時に秘密鍵のパスワードを要求されます。
Enter same passphrase again: 秘密鍵にパスワードを設定した場合、パスワードを再入力します。パスワードを設定しなかった場合は何も入力せずEnterキーを押します。

公開鍵のファイル名変更

公開鍵のファイル名を変更します。これはsshdの設定ファイルで指定している公開鍵ファイル名が先ほど生成した公開鍵「id_rsa.pub」ではなく「authorized_keys」であるためです。

以下のコマンドは先ほどと同じくtestuserで実行します。

$ mv /home/testuser/.ssh/id_rsa.pub /home/testuser/.ssh/authorized_keys

秘密鍵をローカルに保存

testuserでSSH接続する際に利用する秘密鍵をローカル端末(SSH接続元の端末)に保存します。
この秘密鍵はテキストデータなのでコピー&ペーストでローカル端末にテキストファイルとして保存します。

$ less /home/testuser/.ssh/id_rsa

lessコマンドで秘密鍵の中身を見ると以下のように表示されます。
(「q」キーを押すとプロンプト画面に戻れます。)

「-----BEGIN RSA PRIVATE KEY-----」から「-----END RSA PRIVATE KEY-----」までをコピーして、ローカル端末に保存します。
ファイル名は「aws-linux-testuser-20221025.pem」のように秘密鍵であることが分かる名前にします。

秘密鍵の中身(例)
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAxQttJw2eRZx+fXnvRIINbj5chABOR4twcPLHdFWOp2YUhGOx
pInY11t6xZ7+NOBDULa8o5f+6ivu9CdMcvkLpGq+xFME6LuExitwTQItXspyAgml
1TqhnIb+p/8+ZhprIcAOKf9MdsbJGMkXVK2NSCRlIrKw5TntBwIO4HrAHE0fOszY
~~~~~ 略 ~~~~~
B+NWDQKBgQDfE1aX2EVhL0FSXMGkkR+SIUXMbdIHPc6lHWCr1ZZdYp3dElbDCj1W
j3CqLTaLCww2Dg0XHM5XpYLqCQk794l+DONtvICmALTs873kgbRhtY6E4N6XFhwL
6OOBHF+DFTDJdeVT8GIESlvd+FdPLf77Xeo0BHlwK2uM2+QkqkYSVQ==
-----END RSA PRIVATE KEY-----

秘密鍵の削除

秘密鍵をローカル端末に保存した後にサーバから秘密鍵を削除します。
SSHの公開鍵認証を行うサーバ側に秘密鍵は不要であることに加え、秘密鍵は利用者が厳重に管理する必要があるためです。

以下のコマンドは先ほどと同じくtestuserで実行します。

$ rm /home/testuser/.ssh/id_rsa

追加ユーザでSSH接続テスト

追加したtestuserと新たに生成した秘密鍵を利用してサーバへSSH接続します。

さいごに

今回説明した内容は他のLinuxディストリビューションでも活用できるものです。セキュリティ要件で必要になった際にご参考いただけると幸いです。

ご覧いただきありがとうございました。

MEGAZONE株式会社 Tech Blog

Discussion