authorized_keysと.sshの権限|SSH公開鍵認証の安全な設定と確認方法
authorized_keysや.sshの権限は、SSH公開鍵認証が成立するための重要な確認項目です。単にchmod 600にすればよいのではなく、クライアント側の秘密鍵とサーバー側の所有者・ディレクトリ権限を分けて確認します。
このページで分かること
- 秘密鍵・
.ssh・authorized_keysの役割の違い - よく使われる
700・600の意味 - 所有者や親ディレクトリまで確認する理由
sshd -Tで実際の公開鍵ファイル設定を確認する方法- 設定値が正しいのに認証できない場合の次の確認先
先に結論
一般的には、クライアントの~/.sshは700、秘密鍵は600程度に制限し、サーバー側の~/.sshとauthorized_keysも対象ユーザーが所有し、他ユーザーから不用意に書き換えられない状態にします。数値だけでなく所有者・親ディレクトリ・実効設定まで確認するのがポイントです。
権限表記を確認する
700や600が誰にどの権限を与えるか、Linux権限計算ツールで確認できます。
秘密鍵・公開鍵・authorized_keysの役割を分ける
SSH公開鍵認証では、クライアント側とサーバー側で置くものが違います。権限問題を確認するときは、まず「どのファイルを見ているのか」を分けます。
| 場所 | 対象 | 役割 |
|---|---|---|
| クライアント | ~/.ssh/id_ed25519 など | 秘密鍵。本人だけが扱えるよう厳しく保護する |
| クライアント | ~/.ssh/id_ed25519.pub など | 公開鍵。接続先へ登録するための情報 |
| サーバー | ~/.ssh/authorized_keys | そのユーザーへのログインに許可する公開鍵の一覧 |
authorized_keysへ貼り付けるものではありません。authorized_keysへ登録するのは公開鍵です。.sshとauthorized_keysでよく使われる権限の目安
次は一般的によく使われる設定例です。OpenSSHは特に、認証に使うファイルが他ユーザーから書き換え可能な状態を警戒します。
| 対象 | よく使われる例 | 確認したいこと |
|---|---|---|
~/.ssh | 700 | 所有者だけが一覧・作成・移動できる |
| 秘密鍵 | 600 | 所有者だけが読み書きできる |
authorized_keys | 600 | 他ユーザーから書き換えられない |
公開鍵 *.pub | 644 など | 秘密情報ではないが、不必要な書込権限は付けない |
ただし、数字だけを合わせれば必ず認証できるわけではありません。所有者、ホームディレクトリ、ACL、SELinux、sshdの実効設定も認証可否に影響します。
所有者と親ディレクトリも確認する
サーバー側では、接続対象ユーザーのホームディレクトリから.ssh、authorized_keysまでを確認します。authorized_keysだけが正しくても、所有者が別ユーザーだったり、上位ディレクトリが不用意に書き換え可能だったりすると公開鍵認証で問題になることがあります。
必要に応じて、対象ユーザーが所有するように修正します。運用ルールがある環境では、既存要件を確認してから変更してください。
StrictModesが有効な場合、ログインを受け付ける前にユーザーのファイルやホームディレクトリの所有者・モードが適切か確認されます。実効値はsshd -Tで確認できます。AuthorizedKeysFileとStrictModesの実効設定を確認する
authorized_keysを正しい場所へ置いたつもりでも、サーバー側設定で別のパスを参照している可能性があります。設定ファイルを目視するだけでなく、可能ならsshd -Tで実効値を確認します。
AuthorizedKeysFileにはユーザーのホームディレクトリからの相対パスなどを指定できます。環境独自のsshd_config.d設定がある場合、想定していた~/.ssh/authorized_keys以外を参照していることもあります。
sshd_configを修正する場合は、現在のSSHセッションを残したままsudo sshd -tで構文確認し、別セッションから新規接続できることを確認してから既存接続を閉じます。秘密鍵の「bad permissions」はクライアント側を確認する
WARNING: UNPROTECTED PRIVATE KEY FILE!やLoad key ...: bad permissionsのような表示は、接続先のauthorized_keysではなく、まずクライアント側の秘密鍵ファイルの権限を確認します。
一方、Permission denied (publickey)は「秘密鍵の権限」だけが原因とは限りません。ユーザー名、実際に使用した鍵、公開鍵の登録、サーバー側設定など複数の確認が必要です。
公開鍵を登録するときの安全な確認手順
- 接続対象ユーザーとホームディレクトリを確認する
- 公開鍵を対象ユーザーの許可ファイルへ登録する
.ssh・authorized_keysの所有者とモードを確認するsshd -TでAuthorizedKeysFile・PubkeyAuthentication・StrictModesを確認する- クライアント側で使用する秘密鍵を明示し、別セッションから接続テストする
- 失敗した場合は
ssh -vvvとサーバー側ログで認証段階を確認する