コンテンツにスキップ

SSH と鍵ファイルをやさしく理解する

SSH(エスエスエイチ)は、自分の PC からネット越しに サーバーを安全に操作する仕組み です。xserver の WordPress を取り込んだり、本番にデプロイしたりするときに使います。

このページの読みかた

最初から最後まで読まなくても大丈夫です。「鍵ペアって結局なに?」が分かる 「ひとことで言うと」 と、混乱しやすい 「用語」 だけ押さえれば、各事例ページに戻って作業を進められます。

Windows で 鍵ファイルをどこにどう置けばいいか で詰まりやすいので、Windows ユーザーは Windows での SSH 鍵ファイル管理 のページも合わせて読んでください。

ひとことで言うと

SSH は 「家の鍵」と同じ仕組み で、サーバーへの入り口を守っています。

  • 公開鍵(こうかいかぎ)= 玄関の 鍵穴。サーバー側に取り付けておく
  • 秘密鍵(ひみつかぎ)= 自分が持つ 物理の鍵。自分の PC だけに置いておく

自分の鍵を 鍵穴にカチッと差して回せたら開く、という仕組みです。パスワード認証より遥かに安全で、Claude Code がコマンドでサーバーを操作するときも、内部ではこの SSH を使っています。

なぜ必要なのか

xserver や VPS のような外部サーバーにあるファイルを操作するには、ブラウザの管理画面だけでは足りません。

  • 大量のファイルを 一括で取得 / 配置 したい
  • Claude Code に コマンド経由で操作 させたい
  • git push でファイルを反映するときも、内部で SSH が使われる

これらをすべて安全に行うために SSH が標準で使われます。

比喩で理解する

SSH の鍵ペアは「シリンダー錠と物理鍵のセット」です。

普通の方法(パスワード認証) SSH(鍵認証)
パスワードを覚えて毎回入力する 自分の PC に鍵を置いておく
パスワードが漏れたら誰でも入れる 鍵そのものが手元になければ入れない
桁数が短いと総当たりで突破される 鍵は実用的には突破不可能な長さ

そして、秘密鍵は他人に絶対に渡してはいけません。鍵を渡すことは、家の鍵を複製して渡すのと同じです。

よく出てくる用語

公開鍵(.pub がついている方)

ファイル名に .pub がついています(例: id_ed25519.pub)。サーバー側に置く 鍵で、漏れても問題ありません。

秘密鍵(.pub がついていない方)

ファイル名に拡張子がない、または .key で終わるファイル(例: id_ed25519xserver-deploy.key)。自分の PC だけに置く 鍵で、絶対に他人に渡してはいけません。

~/.ssh/ フォルダ

SSH 関連のファイルを置く 専用フォルダ です。

  • macOS / Linux: /Users/<名前>/.ssh/
  • Windows: C:\Users\<名前>\.ssh\

~(チルダ)は「自分のホームフォルダ」を表す省略記号です。フォルダ名の先頭が . で始まっているので、エクスプローラーや Finder では普段見えにくい ことに注意してください。

~/.ssh/config

「このサーバーには、このユーザー名・このポート・この鍵で繋ぐ」という 接続設定をまとめたファイル。これを書いておくと ssh xserver のような短いコマンドで接続できるようになります。

~/.ssh/known_hosts

過去に接続したサーバーの 指紋(フィンガープリント) が保存されているファイル。サーバーの鍵が変わると「他人になりすましている可能性があるよ」と警告してくれます。

パスフレーズ

秘密鍵に追加でかける パスワード のことです。秘密鍵ファイルが万が一漏れても、パスフレーズが分からなければ使えません。鍵をさらに金庫に入れておく イメージです。

パーミッション(chmod 600

鍵ファイルの アクセス権限 のこと。600 は「自分だけが読み書きできて、他のユーザーからは見えない」設定です。SSH は 権限が緩すぎる秘密鍵を読み込まない ので、必ず設定が必要です。

Windows ではパーミッションの仕組みが違う

Windows には chmod コマンドはありません。代わりに ACL(アクセス制御リスト) で同じことをします。詳しくは Windows での SSH 鍵ファイル管理 を参照してください。

基本コマンド(覚えなくて OK)

Claude Code に「xserver に SSH で接続して〜してください」と頼めばすべて代わりにやってくれますが、参考までに。

やりたいこと コマンド
サーバーに接続 ssh xserver
ファイルを送る scp file.txt xserver:/path/
ディレクトリを同期 rsync -av ./local/ xserver:/path/
接続から抜ける exit

xserver の部分は ~/.ssh/config で定義した名前です。

よくある誤解と Q&A

Q. 公開鍵と秘密鍵、どっちをサーバーにアップする?

公開鍵.pub がついている方)です。秘密鍵を間違ってアップロードすると、その鍵はもう使えないと思ってください(再生成してください)。

Q. 秘密鍵をなくしたら?

サーバー側の公開鍵を削除して、新しい鍵ペアを作り直す しかありません。xserver の場合は管理画面から再生成できます。

Q. クラウド同期フォルダ(OneDrive / Dropbox / iCloud Drive)に置いていい?

ダメです。秘密鍵がクラウドに保存されると、そのアカウントを乗っ取られた瞬間に鍵ごと盗まれます。~/.ssh/同期対象から外して ください。

Q. 別の PC で同じ鍵を使いたい

技術的には秘密鍵をコピーすれば使えますが、おすすめしません。代わりに、PC ごとに別の鍵ペアを作って、それぞれの公開鍵をサーバーに登録しておくのが安全です(紛失時にその PC の鍵だけ無効化できる)。

Q. パスフレーズを毎回入力するのが面倒

ssh-agent を使うと PC を起動している間だけ覚えてくれる ようにできます。Claude Code に「ssh-agent で鍵を覚えさせてください」と頼むと設定してくれます。

Q. Claude Code は秘密鍵を読んでしまう?

Claude Code は ssh コマンドを実行する だけで、秘密鍵そのものをファイルとして開いて読むことはほぼありません。鍵の保管場所だけは、自分の目でも確認しておくと安心です。

OS 別の詳細ページ

OS によって、ファイルの場所や扱い方の 流儀が違います。詰まりやすいので、必ず自分の OS に合ったページを参照してください。

  • Windows での SSH 鍵ファイル管理 — エクスプローラーでの場所、icacls でのパーミッション設定、メモ帳の落とし穴、WSL2 と Windows の鍵の違いなど
  • macOS の場合は基本的に Linux と同じ流儀で、~/.ssh/ の下に chmod 600 で置くだけです(事例ページの手順そのままで動きます)

どこで使うか(事例へのリンク)

詰まりやすいエラーと対応

エラー 主な原因 対応
Permission denied (publickey) 鍵のパーミッション緩い/IdentityFile のパス間違い/公開鍵がサーバー未登録/別環境(WSL2)から実行 エラー全文を Claude Code に渡して原因を切り分け。~/.ssh/config のパスとパーミッションを確認
Connection refused サーバー側で SSH が無効、ポート番号間違い xserver なら「SSH 設定」を ON にし、ポート番号を ~/.ssh/configPort と一致させる
Connection timed out サーバー / ファイアウォール / ネットワーク到達不可 サーバー名(HostName)が正しいか、ネットワーク(社内 VPN / Wi-Fi)が SSH を許可しているか確認
Host key verification failed 過去に違う鍵で接続した記録が残っている Claude Code に「~/.ssh/known_hosts から該当エントリを削除して」と依頼して再接続
Permissions for ... are too open. 秘密鍵が他ユーザーから読める状態 macOS/Linux: chmod 600 <鍵> / Windows: icacls で自分だけ読める設定(Windows ガイド 参照)
Bad configuration option: ... ~/.ssh/config の改行コードが CRLF になっている(Windows 限定) VS Code で開いて右下から LF に変更(Windows ガイド 参照)

困ったら Claude Code に エラーメッセージをそのまま貼り付けて 相談するのが一番早いです。

SSH でこういうエラーが出ました。原因と直し方を教えてください。

(ここにエラー全文を貼る)

Windows 特有の詰まりどころは Windows での SSH 鍵ファイル管理 のリファレンス節にもまとめています。事例ページ側の解決事例は 11. トラブルシュート