VPS上においてあるUbuntuに対して公開鍵認証でアクセスする方法についてまとめます。
実行環境
・契約VPS: さくらのVPS
・VPSインストールOS: Ubuntu 20.04 64bit
使用するソフトウェア
- Teraterm: 公開鍵 & 秘密鍵の生成、サーバ上のファイル操作に使います。
手順1: 公開鍵と秘密鍵を生成する (on Teraterm)
サーバ上で秘密鍵&公開鍵を生成して、秘密鍵をダウンロードする方法もありますが、今回は、ローカルPCで両方を生成しておいて、公開鍵をサーバにuploadするという方式を採ります。セキュリティ的にもよいはずです。
1-1: Teratermを起動すると、以下の画面が出ますが、ひとまず消します。

1-2: Setup > SSH Key Generator を選択します

Generateを押します。そして、RSA、Key Bits: 2048としてGenerateを押します。

Key が Generatedされたことを確認した上で、任意のkey passphraseを入力します。
(今後のログインでも必要となります)
Key passSave public key, Save private keyを押して、公開鍵と秘密鍵を生成します。(公開鍵は末尾が.pubとなる点にご注意を!)
手順2: 公開鍵をサーバに配置する
Ubuntuサーバのディレクトリを以下に示します。ログインした時点で、カレントディレクトリ(ユーザーがいる階層)はhomeディレクトリです。homeディレクトリの中には、root権限を持つユーザーと作成した一般ユーザー名のフォルダがあります。このそれぞれのフォルダの中に公開鍵を仕込むのが一般的のようです。
(ubuntuのファイル階層の図を描く)
2-1. root権限にアクセスできるアカウントでログインする
Teratermを使用して、VPSのIPアドレス、SSH接続をします。


まずは、plain password でログインします。ログインできたら、root権限に昇格します。以下のコマンドでroot権限が得られます。root権限を持つアカウントのパスワードが求められます。
sudo su -
root権限が得られると、root@xxxxxの表示が出ます。次にcd(change directory)コマンドで .ssh フォルダに移動します。まず、cd // で一番上の階層に戻ったあと、
cd home/ubuntu/.ssh
で.sshフォルダまで移動しましょう。この時、.sshがない場合はmkdir(make directory)コマンドで.sshフォルダを作成しましょう。そして新しいファイルを作成しましょう。
vi authorized_keys
これで、authorized_keysというファイル名の空ファイルができました。viというのはLinux系OSに入っているテキストエディタで、以下の操作方法で使います。
1. 「i」と入力してインサートモードに変更
2. 好きなように編集
3. ESCキーを押してインサートモードを終了
4. 「:w」と入力して保存
5. 「:q」と入力してviを終了
最後の保存して終了する「:w」「:q」は、まとめて「:wq」とすることもできます
https://uxmilk.jp/8395
viで編集するために、iを押してinsertモードに入りましょう。そして、teratermで作成した公開鍵を貼り付けてください。完了したら、ESC > :wq でviを終了しましょう。
ここまでの設定を一度反映させるために、
systemctl restart ssh
を実行します。exitを実行して、セッションを一度終了して作業を終わりましょう。
手順3: 秘密鍵とPass phraseを使って公開鍵認証を試してみる
再度teratermを起動して、秘密鍵とpass phraseを使って公開鍵認証をしてみましょう。これまで同様にVPSサーバのIPアドレスで叩きます。

Usernameにログインしたいユーザーの名前、Passphraseに公開鍵、秘密鍵を生成したときのphraseを入力します。さらにUse RSA/DSA/ECDSA/ED25519 key to log inを選択し、Private key fieに秘密鍵ファイルをあてがいます。

ログインできれば秘密鍵/公開鍵認証が完了となりました!お疲れさまです!
手順4: password認証を塞ぐ
公開鍵認証だけを受け付けて、セキュリティを高めましょう。sudo権限を持った状態で、sshd_configファイルにアクセスしましょう。
cd /etc/ssh
vi sshd_config
/* 以下を変更してください */
PasswordAuthentication no // yesからnoへ
さらにSSHの再起動を忘れずに行いましょう。
systemctl restart ssh
これ以後は、すべてのアカウントにおいてパスワード認証が通らなくなります。このセッションを継続したまま、ほかセッションでパスワードを使ったログインを試みてください。認証が通らなければ設定完了です。
まとめ
Ubuntuサーバの公開鍵認証設定を行いました。単純なパスワード認証よりもセキュリティが向上するため、より安心して使用できます。次回は、VPS上でpythonを実行してみます。
Tips
Teratermで以下のエラーが発生してログインできない場合

・秘密鍵/公開鍵を生成したときのPassphraseが間違っている
・文字コード、改行コードが編集されてしまっている
いずれかの可能性があります。再度生成するか、以下を見直してください
原因は、頂いたファイルが UTF-8、BOM有、CR+LF になっていたことでした。UTF-8、BOM無、LF でファイルを保存し直して、再度実行すると無事確認できました。
https://humo-life.net/memo/doku.php?id=%E3%82%B5%E3%83%BC%E3%83%90:ssl%E8%A8%BC%E6%98%8E%E6%9B%B8:no_start_line_pem_lib.c_707_expecting_trusted_certificate
コメント