Amazon Lightsail で作業用ユーザーを作成してssh接続してみた。

Amazon Lightsail(OSは Amazon Linux 2023)ではデフォルトのユーザーとして ec2-user が作成されていますが、これとは別の作業用ユーザーを新規作成してssh接続できるようにしてみます。鍵ファイルは自作して、ssh接続ではポート22から任意のポートに変更をします。

作業手順としては、以下です。

  1. 作業用ユーザーの鍵ファイルの作成
  2. サーバーに作業用ユーザーを作成
  3. サーバーに .ssh フォルダを作成
  4. 鍵ファイルをサーバーに送る
  5. いったん、疎通確認
  6. ファイアーウォールの設定変更
  7. sshd_config の設定変更
  8. 最終確認

【 1 】鍵ファイルを作成します。作成はクライアント側で行います。

[ クライアント側作業 ]
ubuntuにログインしてホームディレクトリ配下の .ssh ディレクトリに移動します。ssh-keygen コマンドで鍵生成をします。鍵の形式は RSA、ビット長は 4096、鍵ファイルの名前は id_rsa.j です。


$ pwd
/home/tak/.ssh
$ ssh-keygen -t rsa -b 4096

カレントディレクトリの配下(/home/tak/.ssh)に以下の名前で鍵ファイルが作成されます。

秘密鍵ファイル・・・id_rsa.j
公開鍵ファイル・・・id_rsa.j.pub

【 2 】サーバーで作業用ユーザーを新規作成します。

[ サーバー側作業 ]
ec2-user でサーバーにログインします。その後、root にスイッチして作業します。adduser で tak ユーザーの作成をし、パスワードの設定をします。LightsailDefaultKey.pem は ec2-user の秘密鍵ファイルです。この鍵ファイルは(クライアント側の)ホームディレクトリ配下の .ssh フォルダに配置している例です。


$ ssh -i .ssh/LightsailDefaultKey.pem ec2-user@xxx.xxx.xxx.xxx
$ su -
# adduser tak
# passwd tak

【 3 】サーバーに.ssh フォルダを作成します。

[ サーバー側作業 ]
rootでの作業をいったん終えて、作業用ユーザーにスイッチしてホームディレクトリ配下に .ssh フォルダを作成します。.ssh フォルダは自身しかアクセスできないように700の権限とします。


# exit
$ su tak
$ pwd
/home/tak
$ mkdir .ssh
$ chmod 700 .ssh

【 4 】鍵ファイルをサーバーに送ります。

[ クライアント側作業 ]
scp コマンドで公開鍵ファイルをサーバーにアップロードします。アップロードには ec2-user のアカウントを使います。


$ scp -i .ssh/LightsailDefaultKey.pem .ssh/id_rsa.j.pub ec2-user@xxx.xxx.xxx.xxx:~/.ssh/

上記の scp コマンドでは公開鍵ファイル(id_rsa.j.pub)を ec2-user のホームディレクトリ配下の .ssh フォルダに配置しています。

[ サーバー側作業 ]
送信された鍵ファイルを【3】で作成した tak の .ssh フォルダ配下に移動させます。rootで作業します。


$ su -
# mv /home/ec2-user/.ssh/id_rsa.j.pub /home/tak/.ssh/
# cd /home/tak/.ssh
# chown tak:tak id_rsa.j.pub
# chmod 600 id_rsa.j.pub
# mv id_rsa.j.pub authorized_keys

ファイルの所有者を ec2-user から tak に変更して、アクセス権限を tak のみ(600)に変更しています。そして、ファイル名を authorized_keys に変更します。

これで ec2-user と同様に tak でも公開鍵認証ができるようになります。

【 5 】tak アカウントでsshログインできることの確認をします。

[ クライアント側作業 ]
ec2-user ではなく tak ユーザーでサーバーにログインできることを確認します。鍵ファイルは作成したもの(id_rsa.j)を使います。


$ ssh -i .ssh/id_rsa.j tak@xxx.xxx.xxx.xxx

問題なく接続できれば、作業を続けます。

【 6 】sshのポートを変更するためファイアーウォールの穴あけをしておきます。

[ サーバー側作業 ]
Lightsail の管理画面に入り、インスタンス → ネットワーキングとたどってファイアーウォールの設定画面にいきます。デフォルトでは、SSHのポート22とHTTPのポート80が開いています。

「+ルールを追加」をクリックしてカスタムとしてポートを追加します。SSHのポートは、このあとにここで開ける番号に変更します。以下が追加したものです。

【 7 】sshd_config の修正をします。

[ サーバー側作業 ]
rootにスイッチして、作業を行います。sshd_config はバックアップを取っておきましょう。


$ su -
# cd /etc/ssh
# cp -p sshd_config sshd_config.20240505
# vi sshd_config

viエディタで sshd_config を編集をします。編集項目は以下です。ポート番号の変更と root でのリモートログインを不許可にしておきます。

編集前
Port 22
#PermitRootLogin prohibit-password

編集後
Port yyyyy(任意)
PermitRootLogin no

なお、Lightsail では PubkeyAuthentication、および、PasswordAuthentication はデフォルトで以下となっています。

#PubkeyAuthentication yes
PasswordAuthentication no

PubkeyAuthentication がコメントにされていますが、PubkeyAuthentication のコメントにされたときのデフォルト値はyesなので、鍵認証は有効、パスワード認証は無効という設定です。

編集をしたら sshd_config を保存します。sshdを再起動します。


# systemctl restart sshd

作業しているセッションは再起動しても維持されます。

【 8 】SSHのポート変更後の接続を確認します。

[ クライアント側作業 ]
別のターミナルを開いて、ssh接続できることを確認します。ポートを変更しているので、-p オプションでポート指定をしてください。


$ ssh -i .ssh/id_rsa.j tak@xxx.xxx.xxx.xxx -p yyyyy

接続ができればポートの変更も完了です。

ただしポートを変更しているので Lightsail からのブラウザでのssh接続はできなくなります。

使用するとエラーになるのでポート変更は各自の責任でお願いします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です