はじめに
SSH でサーバに接続するとき、毎回パスワードを入力するのは面倒です。また、パスワード認証は辞書攻撃やブルートフォース攻撃に対して脆弱という側面もあります。
この記事では、SSH の鍵認証を導入して接続を便利かつ安全にする方法をまとめます。具体的には以下の内容を紹介します。
- SSH 鍵ペアの作成
- 公開鍵をサーバに登録する
~/.ssh/configで接続先をまとめるssh-agentでパスフレーズ入力を省略する
SSH 鍵ペアの作成
ssh-keygen コマンドで秘密鍵と公開鍵のペアを生成します。
ssh-keygen -t ed25519 -C "your_comment"
-t ed25519: 鍵の種類を指定します。Ed25519 は現在推奨されているアルゴリズムです。RSA を使う場合は-t rsa -b 4096とします。-C: 鍵に付けるコメントです。登録後にどの鍵か識別しやすくなるため、クライアントのホスト名やユーザ名などを入れておくと便利です。
実行すると保存先とパスフレーズを聞かれます。
Enter file in which to save the key (/home/user/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
保存先はデフォルトのまま Enter で問題ありません。パスフレーズは設定しておくと、万が一秘密鍵が漏洩しても悪用されにくくなるため、より安全にしたい場合は設定することをおすすめします。
生成後、~/.ssh/ に以下の2ファイルが作成されます。
| ファイル | 内容 |
|---|---|
id_ed25519 | 秘密鍵。絶対に外部に公開しないこと |
id_ed25519.pub | 公開鍵。サーバに登録するファイル |
公開鍵をサーバに登録する
ssh-copy-id を使う方法(推奨)
ssh-copy-id コマンドを使うと、公開鍵の登録を簡単に行えます。
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@hostname
このコマンドはリモートサーバの ~/.ssh/authorized_keys に公開鍵を追記してくれます。
手動で登録する方法
ssh-copy-id が使えない場合は手動で行います。
# 公開鍵の内容をコピー
cat ~/.ssh/id_ed25519.pub
# 表示された公開鍵の内容をコピー
# サーバにログインしてから authorized_keys に追記
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "公開鍵の内容をここにペースト" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
~/.ssh/authorized_keys のパーミッションが適切でないと鍵認証が失敗する場合があります。
~/.ssh:700~/.ssh/authorized_keys:600
接続確認
登録後、鍵認証で接続できるか確認します。
ssh user@hostname
パスワードが聞かれずにログインできれば成功です。 鍵作成時にパスフレーズを設定している場合は、鍵のパスフレーズを入力する必要があります。
~/.ssh/config で接続先を管理する
複数のサーバを管理する場合、毎回 ssh user@hostname のように入力するのは手間ですし、似たIPのサーバが複数ある場合は間違いやすくなります。 ~/.ssh/config に設定を書いておくとエイリアスで接続できるようになり、さらにポートの指定や使用する鍵の指定も簡単になります。
Host myserver
HostName 192.168.1.100
User shutils
Port 2222
IdentityFile ~/.ssh/id_ed25519
設定後は以下のコマンドだけで接続できます。
ssh myserver
よく使うオプションを以下にまとめます。
| オプション | 内容 |
|---|---|
Host | エイリアス名。ssh <Host名> で接続する |
HostName | 接続先のホスト名または IP アドレス |
User | ログインユーザ名 |
Port | ポート番号(省略時は 22) |
IdentityFile | 使用する秘密鍵のパス |
また、Host * で全ての接続に共通する設定を記述できます。
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
ServerAliveInterval を設定しておくと、接続が切断されにくくなります。
まとめ
SSH 鍵認証を使うことで、パスワード入力の手間をなくしつつ、セキュリティも向上させることができます。
| やること | コマンド / ファイル |
|---|---|
| 鍵ペアの生成 | ssh-keygen -t ed25519 |
| 公開鍵の登録 | ssh-copy-id user@hostname |
| 接続先の管理 | ~/.ssh/config |
一度設定してしまえば、その後は ssh myserver の一言で接続できるようになります。ぜひ試してみてください。


コメント