【Conoha VPS】TeraTerm等を使わずに、一般ユーザーで公開鍵認証ができるようにする

Conoha VPS公式のスタートアップガイドに背き、勉強もかねてTeraTermなどを使わずにどうにか
**一般ユーザー追加⇒鍵作成⇒SSH接続（公開鍵認証）** までできるようにしてみました。
※初学者向けです。

# 環境
#### 公開鍵作成元
- Windows11
- コマンドプロンプト

#### 公開鍵送付先
- Conoha VPS
- Ubuntu22.04(64bit)

# 前提
- root権限でSSH接続できるようにしておく

    参考：[ConoHa VPS 公開鍵認証でSSH接続](https://qiita.com/kaoru0404/items/9c5ff6d45462e9d06133)

- パスワード認証を有効にする
    
    参考：[SSHのパスワード認証設定をする](https://qiita.com/jinnai73/items/f41fa6df6998d47d1f33)
    **設定を変更した場合は、必ず`` systemctl reload sshd ``を入力し、変更を反映させてください。**
    設定後は、コマンドプロンプトで`` ssh root@VPSのIPアドレス ``を入力し、パスワードを入力すればSSH接続できます。

# ①一般ユーザーを追加する
rootでパスワードを使ってログインし、以下のコマンドを入力します。
~~~vps:VPS
adduser ユーザー名
~~~
:::note warn
Conoha公式では、`` useradd ユーザー名 ``を入力とありますが、Ubuntuの場合、公開鍵をしまうhomeディレクトリが作成されないので、useraddの代わりに`` adduser ユーザー名 ``を入力します。
:::
パスワードを２回入力し、名前・電話番号などを聞かれますが、Enterでスキップします。
最後に、この情報で登録していいか聞かれるのでyを入力し完了です。
~~~VPS:VPS
root@IPアドレス:~# adduser test
Adding user `test' ...
Adding new group `test' (1001) ...
Adding new user `test' (1001) with group `test' ...
Creating home directory `/home/test' ...
Copying files from `/etc/skel' ...
New password:　←セキュリティのため、入力しても表示されません
Retype new password:
passwd: password updated successfully
Changing the user information for test
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] y
~~~

# ②公開鍵と秘密鍵を作成する
まずローカルに戻り、ホームディレクトリ下に、鍵を保存する.sshディレクトリを作成します。
~~~cli:local
cd C\Users\ユーザー名
mkdir .ssh
~~~
次に、.sshディレクトリに移動し、公開鍵と秘密鍵のペアを作成します。
~~~cli:local
cd .ssh
ssh-keygen -t ed25519 -f 鍵の名前
~~~
今回は-t（作成する鍵の暗号化形式の指定）と-f（鍵の名前の指定）のオプションを使用しましたが、使用しなくても作成できます。

他のオプションについてはこちら↓
[【 ssh-keygen 】コマンド――SSHの公開鍵と秘密鍵を作成する](https://atmarkit.itmedia.co.jp/ait/articles/1908/02/news015.html)

パスフレーズを聞かれるので、自分で決めた文字列を２回入力します。

:::note info
パスフレーズとは、サーバーへログインするためのものではなく、秘密鍵にアクセスするための秘密の文字列です。
Enterを押せば、パスフレーズを設定せずに鍵を作成できますが、セキュリティを強化のため、設定することをお勧めします。
:::

.sshディレクトリ内に
・「鍵の名前.pub」（公開鍵）
・「鍵の名前」（秘密鍵）
の二つのファイルができたので、公開鍵をVPSへ保存していきます。

# ③VPSに公開鍵を保存する
VPSに先ほど作成したユーザー名でパスワード認証にてログインし、こちらでも.sshディレクトリを作成し、パーミッションを変更します。
パーミッションとは、そのファイルに対して読み書き・実行などを行う権限のことです。
今回は700に設定します。
参考：[chmodについて](https://www.sejuku.net/blog/50161)
~~~vps:VPS
mkdir .ssh
chmod 700 .ssh
~~~
ローカルに戻り、scpコマンドで公開鍵をVPSにコピーします。
参考：[SCPコマンドについて](https://qiita.com/chihiro/items/142ebe6980a498b5d4a7)

~~~cli:local
scp 鍵の名前.pub ユーザー名@VPSのIPアドレス:~/.ssh/authorized_keys
~~~
これを入力することで、公開鍵の名前を「authorized_keys」に変えてVPSへ保存でき、
きちんと公開鍵として認識してくれるようになります。

:::note warn
Linux系で使える、「ssh-copy-id」という公開鍵をサーバーに送り込める便利なコマンドがあるのですが、今のところWindowsでは使えません。
:::

パスワードを入力し、公開鍵のコピー完了です。

# ④パスワード認証を無効にする
rootでログインしてください。
参考：[viコマンドの使い方](https://tech-blog.rakus.co.jp/entry/20210715/vi)
~~~vps:VPS
vi /etc/ssh/sshd_config

（変更前）
PasswordAuthentication yes
　　　　↓
（変更後）
PasswordAuthentication no
~~~
`` systemctl reload sshd ``で変更を反映します。

これで公開鍵認証ができるようになっているはずなので、SSH接続してみましょう。
~~~cli:local
ssh -i 秘密鍵ファイル名 ユーザー名@VPSのIPアドレス
~~~
以下のように表示されれば接続成功です。
~~~vps:VPS
ユーザー名@VPSのIPアドレス:~$
~~~

ちなみに、SSH接続の度にこのコマンドを毎回入力するのがめんどくさいな～という方は、こちらの設定を行うとちょっと接続が楽になります。
[~/.ssh/configを使ってSSH接続を楽にする](https://tech-blog.rakus.co.jp/entry/20210512/ssh)



# 補足
公開鍵の登録時など、SSH接続をしてみるとこんなエラーがでるときがあります。
~~~cli:local
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'C:\.ssh\test-key.pub' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "C:\.ssh\test-key.pub": bad permissions
test@XX.XXX.XXX.XX: Permission denied (publickey).
~~~
直訳すると「秘密鍵ファイルが保護されてないよ！」となります。
このエラーを解決するには、対象ファイルのアクセス権を自分自身だけ読み書きできるように設定してあげます。
これまたLinux系ですと、先ほど使用した「chmod」という便利なコマンドがあるのですが、Windowsでは使えません。

結局、きちんと秘密鍵ファイルをユーザーフォルダ下に置くことでエラーが出なくなりました。