SSH(Secure Shell)は、ネットワークを介して安全にリモートサーバーに接続するためのプロトコルです。パスワード認証に比べて、公開鍵認証方式はセキュリティが高く、自動化にも適しています。
1. SSHサーバーの設定変更 [接続先PC]
SSHサーバー(sshd
)の設定ファイル /etc/ssh/sshd_config
を編集し、公開鍵認証を有効化し、パスワード認証を無効化します。
sudo nano /etc/ssh/sshd_config
以下の行を探し、設定を変更または追加します。
# 公開鍵認証を有効化
PubkeyAuthentication yes
# パスワード認証を無効化 (セキュリティ向上のため強く推奨)
PasswordAuthentication no
# rootユーザーでの直接ログインを禁止 (セキュリティ向上のため強く推奨)
PermitRootLogin no
# SSHポートの変更 (オプション、デフォルトは22)
# Port 2222
変更を保存したら、SSHサービスを再起動して設定を適用します。
sudo systemctl restart sshd
2. 秘密鍵と公開鍵の作成 [接続元PC]
SSH接続を行うクライアントPCで、SSHキーペア(秘密鍵と公開鍵)を生成します。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-t rsa
: RSA方式で鍵を生成します。より新しいed25519
も推奨されます。-b 4096
: RSA鍵のビット長を指定します(より安全)。-C "your_email@example.com"
: 鍵にコメントを追加します(メールアドレスなど)。
コマンドを実行すると、鍵の保存場所とパスフレーズの入力を求められます。
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): # デフォルトでEnter (通常は変更不要)
Enter passphrase (empty for no passphrase): # パスフレーズを入力 (セキュリティのため推奨)
Enter same passphrase again: # パスフレーズを再入力
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
- パスフレーズ: 秘密鍵を保護するためのパスワードです。設定すると、SSH接続時にこのパスフレーズの入力が必要になります。セキュリティのため、設定を強く推奨します。
生成されるファイル:
id_rsa
: 秘密鍵。絶対に他人に知られてはいけません。id_rsa.pub
: 公開鍵。サーバーに登録します。
3. 公開鍵の登録 [接続先PC]
接続先のサーバーに、生成した公開鍵を登録します。
.ssh
ディレクトリの作成と権限設定
接続先のユーザーのホームディレクトリに .ssh
ディレクトリが存在しない場合は作成し、適切な権限を設定します。
# ユーザーのホームディレクトリに移動
cd /home/[ユーザー名]
# .ssh ディレクトリを作成
mkdir .ssh
# .ssh ディレクトリの所有者をユーザー自身に設定
sudo chown [ユーザー名]:[ユーザーのグループ名] .ssh
# .ssh ディレクトリのパーミッションを700に設定 (所有者のみ読み書き実行可能)
chmod 700 .ssh
authorized_keys
ファイルの作成と公開鍵の登録
.ssh
ディレクトリ内に authorized_keys
ファイルを作成し、その中に公開鍵の内容を貼り付けます。
# authorized_keys ファイルを作成
touch .ssh/authorized_keys
# authorized_keys ファイルのパーミッションを600に設定 (所有者のみ読み書き可能)
chmod 600 .ssh/authorized_keys
# 公開鍵の内容を authorized_keys に追加
# 接続元PCからscpなどで公開鍵を転送するか、手動でコピー&ペースト
# 例: scp ~/.ssh/id_rsa.pub user@remote_host:~/.ssh/id_rsa.pub
# その後、リモートホストで
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
注意: authorized_keys
ファイルには、1行に1つの公開鍵を記述します。
4. SSH接続 [接続元PC]
これで、公開鍵認証方式でSSH接続ができるようになります。
ssh [ユーザー名]@[IPアドレスまたはホスト名]
パスフレーズを設定している場合は、ここでパスフレーズの入力を求められます。
Enter passphrase for key '/Users/[ユーザー名]/.ssh/id_rsa': # パスフレーズを入力
正しく設定されていれば、パスワードなしでリモートサーバーにログインできます。