SSH鍵とは?初心者でもわかる仕組みと設定方法を徹底解説
はじめに
パソコンを使っていると、リモートのサーバに接続したり、GitHubなどのサービスを利用したりする機会が増えてくるのではないでしょうか。
このとき、ログインのたびにパスワードを入力していると手間がかかるうえ、セキュリティにも不安が残ります。
そこで登場するのが SSH鍵 という仕組みです。
SSH鍵は、リモート接続をより安全に、そして手間を減らして行うための重要な手段です。
初心者が「難しそうだな」と感じがちな分野かもしれませんが、本記事では具体的な例や実務での利用シーンと併せながら、できるだけ平易な言葉を使って解説します。
この記事を読むとわかること
- SSH鍵がどんな仕組みで動いているのか
- パスワード認証との違いとメリット
- SSH鍵を実務でどう活用できるのか
- 安全に鍵を管理するポイント
- リモートサーバへ接続するための基本手順
以下では、パソコン初心者レベルでもわかるように丁寧に説明していきます。
ぜひ最後まで読んでみてください。
SSH鍵とは何か
SSH鍵は、サーバとの通信を暗号化しつつ、ユーザー認証をパスワードなしで行うための仕組みです。
SSH自体は「Secure Shell」の略称で、遠隔地にあるサーバに安全にログインして操作できるプロトコルを指します。
通常はパスワードを入力してサーバにログインしますが、SSH鍵を利用すると、自動的に認証が完結する便利さが得られます。
公開鍵と秘密鍵の仕組み
SSH鍵が成り立つ背景には、公開鍵暗号という方式があります。
これは、ペアで使うふたつの鍵を「公開鍵(Public Key)」と「秘密鍵(Private Key)」と呼ぶ仕組みです。
名前のとおり、公開鍵は誰にでも見せて問題ありませんが、秘密鍵は自分だけが厳重に保管する必要があります。
リモートサーバにログインするときは、公開鍵をサーバ側に置き、ログインするクライアント側に秘密鍵を保存しておきます。
サーバ側は、ログインしようとしてくるクライアントが本物の秘密鍵を持っているかを確認し、正しければログインを許可します。
パスワード認証との違い
パスワード認証は、文字列を使って本人確認を行いますが、SSH鍵認証は複雑な暗号アルゴリズムを使います。
パスワードを忘れやすいとか、第三者に盗み見されるリスクもありますが、SSH鍵ならパスワードが不要でありながら、高い安全性を維持できるのが大きな特徴です。
ただし、鍵のファイル自体はとても大切な情報なので、適切な場所に厳重に保管しておく必要があります。
SSH鍵を使うメリット
SSH鍵を使う最大の魅力は、安全性と作業効率の両方を高められる点です。
慣れてくると、パスワードを入力しなくてもログインできる快適さに手放せなくなる人が多いでしょう。
セキュリティの向上
SSH鍵を導入すると、総当たり攻撃(ブルートフォース攻撃)などのパスワードを狙う攻撃を大幅に減らせます。
これは、秘密鍵を所持している本人しかログインできない仕組みだからです。
もちろん鍵のファイルが盗まれたり、PCが不正アクセスを受けたりするとリスクはありますが、単なる文字列パスワードより安全度が高いとされています。
作業効率の向上
キーボード操作だけでリモートログインやGitのプッシュ・プルが行えるようになるため、1日に何度も認証する現場では効率が高まります。
特にサーバ運用や開発をしていると、ターミナルでの操作が頻繁に発生するため、認証のたびにパスワードを打つ手間が省けるのは大きなメリットです。
実務でのSSH鍵の活用シーン
SSH鍵は単に「便利そうだから」という理由だけで使われるわけではありません。
実務ではさまざまな場面で導入されており、セキュリティ事故を防ぐ大切な手段のひとつになっています。
リモートサーバへのログイン
もっとも代表的な使い方は、Linux系サーバへのログインです。
公開鍵をサーバ側の設定ファイルに登録しておくことで、秘密鍵を持つユーザーだけが安全に接続できます。
パスワード認証を禁止してしまえば、ブルートフォース攻撃をかなりの確率でシャットアウトできます。
GitHubやGitLabへの接続
ソースコード管理サービスであるGitHubやGitLabでも、SSH鍵による接続を推奨しています。
パスワードではなく鍵を使うことで、リポジトリへのアクセスをより安全にコントロールできます。
複数のパソコンや仮想マシンから同じリポジトリにアクセスするとき、それぞれ別のSSH鍵を使えば管理しやすいです。
CI/CD環境での自動化
継続的インテグレーション(CI)や継続的デリバリー(CD)のパイプラインでは、リポジトリからソースコードを取得したり、サーバにデプロイしたりする自動化処理がよく行われます。
このときSSH鍵を使って認証を自動化しておけば、パスワードを入力する必要がなくなり、スムーズなフローが実現できます。
SSH鍵の作成手順
SSH鍵を用意する作業は、意外とシンプルです。
一般的には ssh-keygen
というコマンドを使って、秘密鍵と公開鍵のペアを生成します。
コマンド自体は難しくないので、実際にやってみるとスムーズに覚えられるでしょう。
ssh-keygenコマンドの基本
LinuxやmacOSのターミナル、あるいはWindowsのGit BashやPowerShellで ssh-keygen
コマンドを実行します。
たとえば以下のように打つと、SSH鍵を生成できます。
ssh-keygen -t ed25519 -C "example@example.com"
-t ed25519
は鍵のタイプをEd25519に指定する例です。
-C
にはコメントとしてメールアドレスなどを入れておくと、のちのち管理しやすくなります。
ファイルの権限設定
鍵を作成したら、秘密鍵は権限を狭く設定することが推奨されています。
理由は、第三者がうっかり閲覧できる権限だと、鍵の安全性が台無しになってしまうからです。
chmod 600 ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519.pub
このように鍵ファイルの権限を600、ディレクトリ ~/.ssh
の権限は700に設定するのがよくあるパターンです。
キー種別の選択
SSH鍵には、RSA、Ed25519、ECDSAなど複数の種類があります。
実務では、比較的安全性や性能面で評価が高いEd25519か、従来から広く使われているRSAを採用するケースが多いです。
ただし組織のポリシーによっては、RSAが指定されていることもありますので、必要に応じて選びましょう。
SSH鍵を使ったログイン方法
ここからは作成したSSH鍵を使ってリモートログインする方法を見ていきます。
ファイルを適切に配置し、サーバ側に公開鍵を登録すれば、パスワードなしでSSH接続ができるようになります。
Linuxサーバでのセットアップ
Linuxサーバにログインする場合は、サーバ側の ~/.ssh/authorized_keys
というファイルに公開鍵の内容を追記します。
もしディレクトリが存在しない場合は、あらかじめ mkdir ~/.ssh
で作成し、権限を700に設定しておきます。
mkdir -p ~/.ssh chmod 700 ~/.ssh echo "ssh-ed25519 AAAA... example@example.com" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
あとはローカル側で ssh -i ~/.ssh/id_ed25519 user@server-ip
のように秘密鍵を指定して接続すればOKです。
macOSやWindowsでの利用方法
macOSやWindowsでも基本的な流れは同じです。
ただし、Windowsユーザーは「Git Bash」「PowerShell」「PuTTY」など、使用するツールによって手順が微妙に異なります。
一般的には、.ssh
フォルダに秘密鍵と公開鍵を配置し、サーバ側に公開鍵をコピーする方法が簡単です。
Windows環境でSSHクライアントのツールが違うと設定ファイルの場所や書式が変わる可能性があります。手元の環境に合わせて確認してみてください。
SSHエージェントの活用
SSH鍵を使い始めると、複数のサーバやサービスにアクセスするときに鍵のパスを毎回指定するのが面倒に感じるかもしれません。
そこで役立つのが SSHエージェント です。
SSHエージェントとは
SSHエージェントは、メモリ上で秘密鍵を保持してくれるプログラムです。
一度エージェントに鍵を登録しておけば、以降のSSH接続は自動的にエージェントから鍵情報を読み込むため、認証時に鍵ファイルを指定する手間が省けます。
エージェントの起動と鍵登録
多くのLinuxやmacOSでは、ターミナルを開くと自動的にSSHエージェントが起動していることがあります。
もし起動していなければ、以下のように手動で起動してみましょう。
eval "$(ssh-agent -s)"
そのあと、登録したい鍵を ssh-add
コマンドでエージェントに追加します。
ssh-add ~/.ssh/id_ed25519
これで、今後のSSH接続は自動的にこの鍵を利用するようになります。
パスフレーズ管理
SSH鍵はパスワードを不要にしてくれますが、さらに安全性を高める手段として、秘密鍵自体に パスフレーズ をかけておくというやり方があります。
パスフレーズを設定するメリット
もしパソコンそのものが盗難に遭った場合、秘密鍵ファイルをまるごと抜き取られてしまう恐れがあります。
しかし鍵ファイルにパスフレーズを設定しておけば、それ単体を使ってもすぐにはログインできません。
パスフレーズを入力しないと解読できないため、安全性がワンランク上がるイメージです。
passphrase無しの運用リスク
一方で、パスフレーズを設定しないと、パソコンを起動して秘密鍵をコピーされただけでログインができてしまうかもしれません。
管理しやすさという面ではパスフレーズ無しの方が楽ですが、リスクもあるため、取り扱いには注意が必要です。
トラブルシューティング
SSH鍵を設定しても、すんなり動くとは限りません。
代表的なトラブルをいくつか挙げるので、困ったときの参考にしてください。
鍵が認識されないとき
たとえばサーバ側に配置した公開鍵が正しくコピーできていない場合や、改行・スペースが入ってしまっている場合などが考えられます。
公開鍵をファイルに貼り付ける際に、余分な文字が混ざっていないか再チェックしてみましょう。
また、ファイルの権限設定が誤っていることも原因になりやすいです。
パーミッション関連のよくあるエラー
SSHはセキュリティの観点から、秘密鍵や authorized_keys
ファイルの権限が適切でないとエラーを出します。
「Permissions 0644 for 'id_ed25519' are too open」のようなメッセージが出たら、chmod 600
や chmod 700
を見直しましょう。
SSH鍵を使う上での注意点
SSH鍵による認証は安全で便利ですが、だからといって完全にリスクがなくなるわけではありません。
運用面での注意点を押さえておくことで、より安心して利用できるでしょう。
鍵の紛失や漏洩を防ぐために
秘密鍵は他人には見せないのが大前提です。
万が一、誤ってファイル共有サービスにアップロードしたり、メールで送ってしまったりすると、第三者がコピーするかもしれません。
クラウドストレージに保管する場合も、暗号化されたフォルダに入れるなど、慎重に扱いましょう。
使い回しを避ける
複数のサーバやサービスを利用するときに、同じ鍵ペアを使い回すのは避けたほうが無難です。
どこかで鍵が漏洩した場合、すべての環境が危険にさらされるからです。
手間はかかりますが、環境や用途ごとにSSH鍵を生成し直すほうが安全といえます。
SSH鍵を削除・再生成したいとき
運用を続けていると、「もうこの鍵は使わないな」という状況や、「新しく鍵を作り直したい」という場面が出てくるかもしれません。
そんなときの手順について簡単に確認しておきましょう。
不要になった鍵を削除する手順
使わなくなった鍵ファイルは、そのまま放置すると紛失や漏洩のリスクにつながります。
.ssh
ディレクトリ内から鍵ファイルを削除し、サーバ側の authorized_keys
からも該当する公開鍵の行を削除しておきます。
また、SSHエージェントに登録されている場合は ssh-add -d 鍵ファイル
で外しておくといいでしょう。
新しく鍵を作り直す方法
ある鍵ペアが何らかの理由で信用できなくなったら、新しい鍵ペアを生成し、サーバ側に再登録します。
登録が完了したら、古い鍵の行をサーバから消すことで、意図しないログインを防止できます。
鍵ペアを複数同時に使っている場合もあるので、管理には十分気を配りましょう。
マルチユーザー環境でのSSH鍵管理
会社などの開発現場では、複数のメンバーが同じサーバを利用するケースが多々あります。
そんなとき、SSH鍵をどのように管理するかが大きな課題となります。
複数ユーザーの公開鍵配置
複数ユーザーが同じサーバを利用する場合は、それぞれのユーザーアカウントごとに .ssh/authorized_keys
ファイルを持たせるのが基本的なやり方です。
各メンバーは自分専用の鍵ペアを生成し、サーバ側に各自の公開鍵を追加します。
こうすることで、どのユーザーがサーバにアクセスしたかが追跡しやすくなります。
sudo権限とSSH鍵の連携
サーバにログイン後、必要に応じて sudo
コマンドで管理者権限を取得することもよくあるはずです。
SSH鍵認証そのものは、あくまで「リモートログイン時の認証」に重点を置く仕組みです。
特定のユーザーが管理者権限を使えるようにするには、サーバ内の sudoers
設定も合わせて適切に行う必要があります。
SSH鍵と他のセキュリティ対策
SSH鍵を導入すると安全性が高まりますが、サーバセキュリティは多層防御が原則です。
ファイアウォールや侵入防止ツールなども併せて設定することで、より強固な防御体制が整えられます。
ファイアウォール設定との併用
ファイアウォールを設定しておけば、特定のIPアドレスからしかSSH接続を受け付けないようにすることが可能です。
SSH鍵だけに頼らず、ネットワークレベルでもアクセスを制限すると安全度が上がります。
とくにインターネットに直接公開しているサーバは、ファイアウォールの設定が重要です。
Fail2banなどのツールとの連携
もしもパスワード認証を併用している場合、Fail2banなどのログ監視ツールによって不正アクセスをブロックする仕組みを導入するとさらに安心です。
SSH鍵と組み合わせることで、万が一パスワード認証を許可していても、ブルートフォース攻撃を抑制できます。
よくある質問
SSH鍵についてよくある疑問をまとめました。
初心者がつまずきやすいポイントなので、一度確認しておくと安心です。
キーの種類は何を選んだらいい?
基本的には Ed25519 か RSA が主流です。
Ed25519は鍵のサイズが小さくて扱いやすく、速度面でもメリットがあるといわれています。
RSAは昔から利用実績が大きいという点で安定感がありますが、組織のポリシーで鍵長が指定される場合もあるため、要件に合わせて選んでください。
Git用のSSH鍵はサーバの鍵と分けるべき?
同じ鍵をあちこちで使い回すのはセキュリティリスクが高まります。
できるだけ サービスごと、用途ごとに別の鍵を生成 するのが望ましいです。
GitHub専用に鍵を作成し、リモートサーバにログインする鍵はまた別に用意するといった運用が一般的です。
まとめ
ここまで、SSH鍵の仕組みやメリット、具体的な作成・利用手順、さらにトラブルシューティングまで一気に解説してきました。
パスワード認証と比べて導入までの手間は多少かかりますが、いったん設定を済ませれば、セキュリティと利便性の両面で大きな恩恵を得られます。
実務でもSSH鍵を活用する場面は多いので、初心者のうちから基本的な作法を知っておくことはとても大切です。
セキュリティ向上のために、パスワード不要の鍵認証を採り入れてみてはいかがでしょうか。
SSH鍵は便利な反面、秘密鍵の漏洩リスクには十分注意してください。
各サーバやサービスごとに鍵を作成し、パスフレーズや権限設定などを整えることで、安全性と利便性を両立できるはずです。