Amazon Lightsail(OSは Amazon Linux 2023)ではデフォルトのユーザーとして ec2-user が作成されていますが、これとは別の作業用ユーザーを新規作成してssh接続できるようにしてみます。鍵ファイルは自作して、ssh接続ではポート22から任意のポートに変更をします。
作業手順としては、以下です。
- 作業用ユーザーの鍵ファイルの作成
- サーバーに作業用ユーザーを作成
- サーバーに .ssh フォルダを作成
- 鍵ファイルをサーバーに送る
- いったん、疎通確認
- ファイアーウォールの設定変更
- sshd_config の設定変更
- 最終確認
【 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接続はできなくなります。
使用するとエラーになるのでポート変更は各自の責任でお願いします。