概要
Xserverレンタルサーバーを借りたので
- SSHアクセスできるようにした
- デフォルトで生成された公開鍵の暗号化アルゴリズムがイマイチ(
RSA
)だったのでEd25519
に変更
動作環境
- macOS Sonoma Version 14.5
- OpenSSH 9.6p1
Xserverのマニュアル通りに設定してみる
Xserverレンタルサーバーを借りることにしたので、何はともあれSSHアクセスできるように設定を行いました。
Xserverレンタルサーバーは、初心者にもやさしい親切マニュアルが用意されています。 ヘルプも充実していますし悩むことはあまりなさそうです。
とりあえずこのマニュアルに沿ってSSH接続を行ってみます。 ポイントとなるのは
- パスワード認証はオミットされており、必ず公開鍵認証でログインする必要がある
- 接続先ポート番号はSSHデフォルトの 22 ではなく 10022
あたりでしょうか。 まずはマニュアル通りに、
- Xserverのサーバーパネルのメニューから、[アカウント]>[SSH設定]と進み、[ONにする]を選択、[設定する]ボタンをクリック
- [公開鍵認証用鍵ペアの生成]タグから、適当なパスフレーズを入力(ログイン時も使用するので忘れないように)して、[確認画面へ進む]>[生成する]ボタンをクリック
これでサーバ側には新たに生成された公開鍵が保存されるとともに、秘密鍵のダウンロードが始まります。(ファイル名: [サーバーID].key)
ダウンロードされた秘密鍵ファイルを確認しますと、RSAアルゴリズムにより生成されたものでした。
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,440AF4411516...
QB3BzgNhQ3TfHUVD75pv2iMf2lYu+q96cGKKj/Nxep92lcHgZnTzt3pdOq+UrlZc
VvnaCitHmWAzijizEIODzxi//KQsPcM2t14tBR4IvbEeomlLsihl2PIk2Ofoc1fY
:
Lnz32p+i6kmBPLzffZwBS6bUVbzru9fsvLYPYp5VnhulbAqHHX/LsgaT/5x+I/WH
-----END RSA PRIVATE KEY-----
ヘッダ行が "-----BEGIN OPENSSH PRIVATE KEY-----"
ではなく "-----BEGIN RSA PRIVATE KEY-----"
で始まっているので、OpenSSH 7.8より前の古い形式のフォーマットと思われます。
ダウンロードした秘密鍵ファイルは、お約束で ~/.ssh/
に移動し、パーミッションを(自分以外アクセス不可に)変えておきます。
$ mv ~/Download/{サーバーID}.key ~/.ssh/
$ chmod 600 ~/.ssh/{サーバーID}.key
さっそくサーバにssh
ログインしてみます。 ログイン時に必要なのはユーザ名、ホスト名、そして秘密鍵に設定したパスフレーズです。
Xserverローカルルールでは[サーバーID]([サーバー番号]とは異なる)が、実のところログインユーザ名になっています。
また、自分のサーバのホスト名はサーバーパネルの[サーバー情報]から確認できます。(Xserverでは、ホスト名 = [サーバー番号].xserver.jp となっている模様)
$ ssh -p 10022 -i ~/.ssh/{サーバーID}.key {サーバーID}@{サーバー番号}.xserver.jp
The authenticity of host '[サーバー番号].xserver.jp:10022 ([IPアドレス]:10022)' can't be established.
ED25519 key fingerprint is SHA256:SIbxkY1g......Q+cSixBu.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[サーバー番号].xserver.jp:10022' (ED25519) to the list of known hosts.
Enter passphrase for key '[サーバーID].key': ********
[サーバーID@サーバー番号 ~]$
最初のログインなのでまだknown_hosts
に登録されておらず、確認を求められますが "yes"
を入力し、秘密鍵を作成した際のパスフレーズを入力すれば完了です。
無事ログインできましたので、せっかくですからサーバ側のssh
バージョンを確認しておきます。
[サーバーID@サーバー番号 ~]$ which ssh
/usr/bin/ssh
[サーバーID@サーバー番号 ~]$ /usr/bin/ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
7.4、でした…
SSHで使う公開鍵暗号は何がベストか
とりまSSHログインはできたものの、サーバ側のOpenSSHのバージョンはかなり古い上、生成された鍵もRSAという古(いにしえ)のアルゴリズムで生成されてました。
それってセキュリティ的にどうなんでしょう… 私、気になります!
ChatGPTさんに(日本語で)訊いてみた (4.0o)
SSHの公開鍵暗号アルゴリズムは何が良いの?
SSHの公開鍵暗号アルゴリズムにはいくつかの種類があり、それぞれセキュリティとパフォーマンスのバランスが異なります。現在広く使用されているアルゴリズムを、セキュリティとパフォーマンスの観点からおすすめ順に挙げてみます。
Ed25519
- セキュリティ: 非常に高い
- パフォーマンス: 非常に高い(鍵の生成や署名、検証が高速)
- 特徴: 曲線25519を基にした楕円曲線暗号で、従来のRSAやDSAと比べて小さな鍵サイズで同等のセキュリティを提供します。現代的なアルゴリズムで、多くの用途で推奨されます。
ECDSA (Elliptic Curve Digital Signature Algorithm)
- セキュリティ: 高い(使用する曲線による)
- パフォーマンス: 高い(Ed25519よりは若干遅いがRSAより高速)
- 特徴: NISTが標準化した楕円曲線暗号で、一般的にsecp256r1(P-256)などの曲線が使われます。鍵サイズが小さく、従来のアルゴリズムに比べて効率的です。
RSA (Rivest-Shamir-Adleman)
- セキュリティ: 高い(鍵サイズによる)
- パフォーマンス: 中程度(鍵サイズが大きくなると遅くなる)
- 特徴: 最も広く使用されている公開鍵暗号の一つで、セキュリティは鍵サイズ(一般に2048ビット以上が推奨)に依存します。鍵生成や署名・検証の計算が重いことが欠点です。
DSA (Digital Signature Algorithm)
- セキュリティ: 中程度(現在は非推奨)
- パフォーマンス: 高い(特に署名の生成が速い)
- 特徴: 古い標準で、現在は2048ビットの鍵が最低限推奨されていますが、他のアルゴリズムに比べてセキュリティが劣るため、現代ではほとんど使用されていません。
総評
- Ed25519が現代的な用途に最も適しており、セキュリティとパフォーマンスのバランスが非常に良いです。
- ECDSAも依然として良い選択肢であり、特に既存のシステムとの互換性が必要な場合に使われます。
- RSAは依然として広く使われていますが、パフォーマンス面で劣るため、新規システムではEd25519やECDSAに置き換えることが推奨されます。
- DSAはセキュリティ面で他のアルゴリズムに劣るため、使用は推奨されません。
これらのアルゴリズムは、OpenSSHなどのSSH実装においてサポートされているため、具体的な環境や要件に応じて適切なものを選ぶと良いでしょう。
Googleさんに訊いてみた
検索文字列: best ssh algorithm
検索結果上位2つの記事の結論はどちらも「(特に制限がなければ)Ed25519
を使っとけ」ということでした。内容も含めChatGPTさんの見解と一致しています。
Xserverの公開鍵暗号アルゴリズムをEd25519
に変更する
Ed25519
はOpenSSH 6.5以降でサポートされています。
バージョン 6.5といえば10年も前にリリースされた年代モノ。 2024年の今、よほどカビの生えた残念な環境でなければEd25519
は問題なく使えるでしょう。(Xserver環境もOpenSSH 7.4なのでセーフ)
という訳で先に作成したRSA暗号鍵は破棄し、ローカル環境でssh-keygen
コマンドを使ってEd25519
を使った鍵ペアを新たに作成します。
$ ssh-keygen -t ed25519 -f ~/.ssh/{鍵ファイル名} -C "{コメント}"
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase): ********
Enter same passphrase again: ********
Your identification has been saved in ~/.ssh/[鍵ファイル名]
Your public key has been saved in ~/.ssh/[鍵ファイル名].pub
The key fingerprint is:
SHA256:O/IoKNTFHv4Ga7HkqSYW/idb2NlmB/TUpXZgeWGhtSSfo [コメント]
The key's randomart image is:
+--[ED25519 256]--+
| ... oo. . |
| . . ..+ + |
| . . . .. * . |
|o+. o .o + . |
|+oo+... S E+ . |
|.o+..+.. . o |
|oo *..o.o = |
|+ = + ++o . |
| o.o .o.. |
+----[SHA256]-----+
コメントは省略可。 パスフレーズも無しにできますが、セキュリティ的には設定しておくほうが良いでしょう。
秘密鍵と公開鍵ができましたので、公開鍵のほうをXserverのサーバーパネルから登録します。
[アカウント]>[SSH設定]>[公開鍵登録・更新]タブの公開鍵入力フィールドに、新たに生成した公開鍵(拡張子.pub
)の中身をコピペします。
"ssh-ed25519 ..."
から始まるEd25519
の公開鍵はわずか一行。 先に作成したRSA公開鍵と比べればびっくりするくらい短いですが、良いんです。 それで合っています。
公開鍵を貼り付けたら、[確認画面へ進む]>[登録する]をクリックして、公開鍵の登録は完了です。
公開鍵が登録できたので、新しいEd25519
の秘密鍵を使ってログインしてみます。(指定する鍵ファイル名が新しいものに変わる以外、オプションはRSAの時と一緒です)
$ ssh -p 10022 -i ~/.ssh/{鍵ファイル名} {サーバーID}@{サーバー番号}.xserver.jp
Enter passphrase for key '[鍵ファイル名]': ********
Last login: Sat May 25 20:10:34 2024 from [アクセス元]
[サーバーID@サーバー番号 ~]$
無事Ed25519
の公開鍵認証でログインできました!
先にサーバーパネルから生成したRSA公開鍵は上書きされて消えていますので、古いRSA秘密鍵も不要です。 混乱しないよう消しておくのが良いでしょう。