SSH公開鍵認証でVPSに接続する方法
SSHでVPSなどのサーバーに接続する際は、公開鍵認証を使うとパスワードを使わずに安全にログインできる。
基本的な流れは、
ローカルPC
│
├── 秘密鍵
└── 公開鍵
│
│ 公開鍵をサーバーへ登録
▼
VPS
└── ~/.ssh/authorized_keys
│
│ SSH公開鍵認証
▼
ローカルPC → VPS
1. ローカルPCでSSHキーを作成
WindowsのPowerShellで以下を実行する。
ssh-keygen -t ed25519 -f $HOME\.ssh\<キーの名前>
例えば、
ssh-keygen -t ed25519 -f $HOME\.ssh\vps_key
とすると、以下の2つのファイルが作成される。
~/.ssh/
├── vps_key
└── vps_key.pub
それぞれの役割は以下の通り。
| ファイル | 役割 |
|---|---|
vps_key |
秘密鍵 |
vps_key.pub |
公開鍵 |
秘密鍵は絶対に他人に渡したり、GitHubなどに公開したりしない。
2. 公開鍵を表示してコピー
ローカルPCで以下を実行する。
cat $HOME\.ssh\<キーの名前>.pub
例えば、
cat $HOME\.ssh\vps_key.pub
すると、
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... username@PC
のような1行が表示される。
この公開鍵の1行全体をコピーする。
3. VPS側で .ssh ディレクトリを作成
VPSにログインし、以下を実行する。
mkdir -p ~/.ssh
~/.ssh が存在しない場合に作成する。
-p を付けることで、すでに存在していてもエラーにならない。
4. .ssh の権限を設定
chmod 700 ~/.ssh
700 は所有者にのみ、
読み取り r
書き込み w
実行 x
の権限を与える設定。
SSHでは .ssh ディレクトリを他のユーザーからアクセスできないようにする。
5. 公開鍵を authorized_keys に登録
先ほどローカルPCでコピーした公開鍵を、VPS側で以下のように追加する。
echo 'コピーした公開鍵' >> ~/.ssh/authorized_keys
例えば、
echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... username@PC' >> ~/.ssh/authorized_keys
とする。
authorized_keys とは?
authorized_keys は、
このサーバーへのSSHログインを許可する公開鍵を登録しておくファイル
である。
複数の公開鍵を登録することもできる。
~/.ssh/authorized_keys
ssh-ed25519 AAAA... PC1
ssh-ed25519 AAAA... PC2
ssh-ed25519 AAAA... PC3
1行につき1つの公開鍵を登録する。
6. authorized_keys の権限を設定
chmod 600 ~/.ssh/authorized_keys
600 は所有者だけが、
読み取り r
書き込み w
できる設定。
所有者:rw-
グループ:---
その他:---
SSHの公開鍵認証では、このように適切な権限を設定しておく。
7. ローカルPCに戻ってSSH接続
VPSからログアウトしてローカルPCに戻る。
WindowsのPowerShellで、
ssh -i $HOME\.ssh\<キーの名前> <VPSのユーザー名>@<VPSの外部IP>
を実行する。
例えば、
ssh -i $HOME\.ssh\vps_key root@203.0.113.10
または、
ssh -i $HOME\.ssh\vps_key ubuntu@203.0.113.10
のようにする。
SSH公開鍵認証の仕組み
最終的には以下のような構成になる。
┌─────────────────────────┐
│ ローカルPC │
│ │
│ vps_key │
│ └─ 秘密鍵 │
│ │
│ vps_key.pub │
│ └─ 公開鍵 │
└───────────┬─────────────┘
│
│ SSH接続
│
│ 秘密鍵を使用して認証
▼
┌─────────────────────────┐
│ VPS │
│ │
│ ~/.ssh/ │
│ │ │
│ └─ authorized_keys│
│ │ │
│ └─ 公開鍵 │
└─────────────────────────┘
SSH接続時には、VPS側の authorized_keys に登録されている公開鍵と、ローカルPCが持っている秘密鍵が対応していることを利用して認証する。
コマンドまとめ
ローカルPC
SSHキーを作成
ssh-keygen -t ed25519 -f $HOME\.ssh\<キーの名前>
公開鍵を表示
cat $HOME\.ssh\<キーの名前>.pub
表示された公開鍵をコピーする。
VPS
.ssh を作成
mkdir -p ~/.ssh
.ssh の権限を設定
chmod 700 ~/.ssh
公開鍵を登録
echo 'コピーした公開鍵' >> ~/.ssh/authorized_keys
authorized_keys の権限を設定
chmod 600 ~/.ssh/authorized_keys
ローカルPC
SSH接続
ssh -i $HOME\.ssh\<キーの名前> <VPSのユーザー名>@<VPSの外部IP>
重要なポイント
- 秘密鍵はローカルPCに置く
- 公開鍵はVPSの
~/.ssh/authorized_keysに登録する - 秘密鍵は絶対に公開しない
-
authorized_keysは複数の公開鍵を登録できる -
chmod 700 ~/.sshで.sshを保護する -
chmod 600 ~/.ssh/authorized_keysでauthorized_keysを保護する - SSH接続時は秘密鍵を
-iで指定する -
<VPSのユーザー名>はVPS上でログインするユーザー名 -
<VPSの外部IP>はSSH接続先となるサーバーのIPアドレス