1.

SSH2 秘密鍵の読み込みに失敗しました の原因と対処

編集
この記事の要点
  • SSH2 秘密鍵の読み込みに失敗しました秘密鍵ファイルの形式 / パスワード / 権限の問題
  • 原因 ①: OpenSSH 形式(BEGIN OPENSSH PRIVATE KEY)を古い PuTTY/TeraTerm で読み込んだ
  • 原因 ②: パスフレーズ間違い
  • 原因 ③: 鍵ファイルの権限が緩い (chmod 400 推奨)
  • 対処: ssh-keygen -p -f key で形式変換、chmod 400 で権限調整

 

エラーの状況

# Tera Term / PuTTY 等で
SSH2 秘密鍵の読み込みに失敗しました。

# OpenSSH コマンドラインから
$ ssh -i ~/.ssh/id_rsa user@server
Load key "/home/user/.ssh/id_rsa": bad permissions
Permissions 0644 for ".ssh/id_rsa" are too open.

# または
Load key "/home/user/.ssh/id_rsa": Permission denied

原因と対処

原因 1: ファイル権限が緩い

# 秘密鍵は所有者のみ読み取り可能でなければならない
$ ls -l ~/.ssh/id_rsa
-rw-r--r-- 1 user user 1675 May 15 12:00 id_rsa
# ↑ others が読める → 拒否される

# 修正
$ chmod 400 ~/.ssh/id_rsa
$ ls -l ~/.ssh/id_rsa
-r-------- 1 user user 1675 May 15 12:00 id_rsa

# .ssh ディレクトリ自体も
$ chmod 700 ~/.ssh

# Windows
> icacls C:\Users\user\.ssh\id_rsa /inheritance:r
> icacls C:\Users\user\.ssh\id_rsa /grant:r "%USERNAME%:F"
> icacls C:\Users\user\.ssh\id_rsa /remove "BUILTIN\Users"

原因 2: OpenSSH 形式と旧形式の不整合

OpenSSH 7.8+ は新形式(BEGIN OPENSSH PRIVATE KEY)で鍵生成しますが、古い PuTTY (0.74 以前) / Tera Term / WinSCP では非対応:

# 形式確認
$ head -1 ~/.ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----   ← 新形式 (古いツール非対応)
-----BEGIN RSA PRIVATE KEY-----       ← 旧 PEM 形式 (互換)

# 新形式を旧形式(PEM)に変換
$ ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
Enter old passphrase: ****
Key has comment ...
Enter new passphrase (empty for no passphrase): ****
Enter same passphrase again: ****
Your identification has been saved with the new passphrase.

# 確認
$ head -1 ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----   ← 旧形式に変換完了

原因 3: PuTTY 形式 (.ppk) と OpenSSH 形式の混同

PuTTY は .ppk 形式、OpenSSH は id_rsa 形式。相互変換が必要:

# OpenSSH → PuTTY (.ppk)
# Windows: PuTTYgen を使用
# Tera Term は OpenSSH 形式を直接使える

# Linux: puttygen コマンド
$ sudo apt install putty-tools
$ puttygen ~/.ssh/id_rsa -O private -o ~/.ssh/id_rsa.ppk

# PuTTY → OpenSSH
$ puttygen id_rsa.ppk -O private-openssh -o ~/.ssh/id_rsa

原因 4: パスフレーズ間違い

# パスフレーズが正しいか確認
$ ssh-keygen -p -f ~/.ssh/id_rsa
Enter old passphrase: (入力)
# パスフレーズが間違っていれば「passphrase is incorrect」

# パスフレーズなしに変更
$ ssh-keygen -p -f ~/.ssh/id_rsa
Enter old passphrase: ****  (現在のパスフレーズ)
Enter new passphrase (empty for no passphrase):  (空でEnter)
Enter same passphrase again:  (空でEnter)

# パスフレーズリセット (鍵自体は同じ、暗号化のみ変更)

原因 5: 鍵ファイルが破損

# サイズ確認
$ ls -l ~/.ssh/id_rsa
# 普通は 1.6KB - 3.4KB 程度

# 内容確認
$ head ~/.ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDx...

# 改行コードが Windows (CRLF) になっている場合は LF に変換
$ dos2unix ~/.ssh/id_rsa

新しい鍵ペアを生成(推奨)

# Ed25519 (推奨、最新)
$ ssh-keygen -t ed25519 -C "your@email.com"

# RSA 4096 bit (互換性重視)
$ ssh-keygen -t rsa -b 4096 -C "your@email.com"

# 出力ファイル名指定
$ ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_work

# パスフレーズなし (自動化用、推奨されない)
$ ssh-keygen -t ed25519 -N ""

# 公開鍵をサーバにコピー
$ ssh-copy-id user@server

# または手動
$ cat ~/.ssh/id_ed25519.pub | ssh user@server "cat >> ~/.ssh/authorized_keys"

各 SSH クライアントでの鍵設定

Tera Term

  1. 「設定」 → 「SSH 認証」
  2. 「RSA / DSA / ECDSA / ED25519 鍵を使う」を選択
  3. 「秘密鍵」で id_rsa ファイル指定
  4. パスフレーズ入力

PuTTY

  1. セッション設定 → 「Connection」 → 「SSH」 → 「Auth」
  2. 「Private key file for authentication」で .ppk 指定
  3. パスフレーズはセッション開始時に入力

OpenSSH (Linux/Mac)

# コマンドラインで
$ ssh -i ~/.ssh/id_rsa user@server

# config ファイルに登録 (~/.ssh/config)
Host myserver
    HostName 192.168.1.100
    User myuser
    IdentityFile ~/.ssh/id_rsa
    Port 22

# 接続
$ ssh myserver

VSCode Remote SSH

# settings.json
{
    "remote.SSH.configFile": "~/.ssh/config"
}

# .ssh/config に Host を定義してから VSCode で接続

SSH エージェント活用

# Linux/Mac
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_rsa
Enter passphrase: ****
# → 以後そのターミナルではパスフレーズ入力不要

# ~/.bashrc で自動起動
if [ -z "$SSH_AUTH_SOCK" ]; then
    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_rsa 2>/dev/null
fi

# Windows OpenSSH (Win10+)
Start-Service ssh-agent
ssh-add ~/.ssh/id_rsa

関連エラー

  • Permission denied (publickey): 公開鍵がサーバの authorized_keys にない
  • Host key verification failed: known_hosts のエントリ不一致
  • Connection refused: SSH サーバが起動していない / ファイアウォール
  • Bad owner or permissions on .ssh/config: .ssh/config の権限 (chmod 600)

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. SSH2秘密鍵の読み込みに失敗しました
  2. 認証に失敗しました。再試行してください。