この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
セミナーでこの質問を受けるたびに、私は少し立ち止まります。コマンドは使えている。繋がってはいる。でも「本当の意味で理解しているか」と聞かれると、実は多くの人がそこで詰まる。
この記事では、20年以上Linuxサーバーを運用・指導してきた経験から、SSHの「手順」ではなく「本質」をお伝えします。コマンドを暗記することより、仕組みを腑に落とすことが、現場で本当に役立つからです。
この記事のポイント
・SSHは「暗号化された遠隔操作」だが、本質は「信頼の確立」にある
・コマンドが打てる状態と「理解している」状態は全く別物である
・鍵認証の仕組みを知ると、なぜ「known_hosts警告」が重要かが分かる
・現場では「繋がった」で終わらず「なぜ繋がるか」を語れる人が信頼される
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
「繋がった」と「理解した」の間にある大きな溝
私がSEとして働いていた2001年頃、Linuxサーバーへの接続はtelnetが主流でした。パスワードが平文でネットワーク上を流れる時代です。SSHが普及し始めたのは、その少し後のこと。最初にSSHを使ったとき、正直「あ、繋がった」程度の感覚でした。telnetと見た目が大きく変わらない。コマンドも同じように打てる。「何が違うの?」という感覚を持ちながら、とりあえず使っていた記憶があります。
これは多くの人が通る道だと思います。
セミナーで3,100名以上を指導してきた中で、SSHコマンドは打てるけど「なぜ繋がるか」が分からない、という受講生には何度となく出会いました。そして、そこを理解した瞬間に、表情が変わる人の顔も、何度も見てきました。
SSHが本当にやっていること
SSHとはSecure Shellの略です。「セキュアなシェル接続」というのは分かる。では、何が「セキュア」なのか。大きく3つです。
・通信の暗号化:パスワードや操作内容が平文でネットワークを流れない
・サーバーの認証:本物のサーバーに繋いでいることを確認できる
・クライアントの認証:正しいユーザーであることをサーバーが確認できる
このうち、多くの人が意識していないのが「サーバーの認証」です。
初めてあるサーバーにSSHで接続すると、こんな警告が出ます。
The authenticity of host '192.168.x.x (192.168.x.x)' can't be established. ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Are you sure you want to continue connecting (yes/no/[fingerprint])?
しかしこのメッセージは重要なことを言っています。「このサーバーのことを、私はまだ知りません。本当に繋いでいいですか?」という問いかけです。
1. known_hostsが何をしているか
yesと答えると、サーバーの公開鍵のフィンガープリントが `~/.ssh/known_hosts` に記録されます。次回以降は自動的に照合され、警告は出なくなります。では、この照合が失敗したら?
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
でも、本当に「誰かが悪意ある偽サーバーを間に挟んでいる(中間者攻撃)」場合にも、同じ警告が出ます。
「なんかエラーが出たから消した」で済ますのではなく、「なぜホスト鍵が変わったのか」を確認する習慣——これが分かるかどうかで、現場での信頼が大きく変わります。
2. 公開鍵認証の「やり取り」を頭の中で描けるか
パスワード認証より公開鍵認証の方が安全、という話はよく聞きます。でも「なぜか」を説明できる人は意外と少ない。公開鍵認証の流れを、大まかに言うと次のようになります。
・事前準備:手元のPC(クライアント)で鍵ペアを生成する。秘密鍵は手元に保管、公開鍵はサーバーの `~/.ssh/authorized_keys` に登録する
・接続時:サーバーがランダムな「問いかけ」を作り、クライアントに送る
・応答:クライアントは秘密鍵でその「問いかけ」に署名して返す
・検証:サーバーは公開鍵でその署名を検証する。一致すれば認証成功
重要なのは、秘密鍵がネットワーク上を流れないことです。パスワードは認証のたびに送信されますが、公開鍵認証では秘密鍵は絶対に手元から出ない。
この仕組みが頭に入っていると、「なぜ秘密鍵の権限を400にしないといけないのか」「なぜ `authorized_keys` のパーミッションが600でないと接続できないのか」という細かな設定の理由が自然に分かります。
3. ポートフォワーディングで「SSHの本質」が見えてくる
SSHが「セキュアなトンネル」であることが一番よく分かるのが、ポートフォワーディングです。例えば、外部からアクセスできないデータベースサーバーに、SSHを経由して繋ぎたいとします。
# ローカルの3306番ポートを、踏み台サーバー経由でDBサーバーの3306番に転送する ssh -L 3306:db-server:3306 user@jump-server
ポートフォワーディングを初めて理解したとき、SSHが単なる「ログインツール」ではなく「安全な通信路を作るインフラ」だと腑に落ちました。現場でも、この理解の有無で対応できる場面が大きく変わります。
「繋がる」から「なぜ繋がるか」への転換
20年以上Linuxの現場にいて感じるのは、技術の深さよりも「なぜ」を問い続ける習慣の方が長期的に差がつく、ということです。SSHに限った話ではありません。コマンドが動いたとき、「なぜ動いたのか」を少しだけ考える。エラーが出たとき、「何を言っているのか」を翻訳しようとする。
その積み重ねが、5年後・10年後に現場で信頼されるエンジニアの土台になります。
セミナーでよくお伝えする言葉があります。「コマンドは忘れていい。仕組みは忘れるな」。
コマンドはmanを確認すれば分かる。でも仕組みの理解は、マニュアルを読む前の「正しい問いの立て方」につながります。known_hostsの警告が出たとき、「消せばいい」ではなく「なぜ変わったのか」を考えられるか。この違いが、結局のところ現場での安心感に直結します。
SSH理解を深めるための3つの実践
1. 鍵認証を設定して、なぜ繋がるかを追う
パスワード認証に頼っている人は、公開鍵認証を自分で設定してみてください。ssh-keygenで鍵を作り、authorized_keysに登録する作業の中で、「何をどこに置いているのか」が体で分かります。設定後、あえてauthorized_keysのパーミッションを644にして接続できなくなる体験をするのも有効です。「なぜ600でないといけないのか」が実感で分かります。
2. known_hostsを意識的に確認する
`~/.ssh/known_hosts` を開いて、どんな形式で記録されているか確認してみてください。ホスト名(またはIPアドレス)と公開鍵が記録されています。接続先のサーバーが複数あるなら、それぞれのエントリが記録されていることを確認する。実体のあるものとして認識することで、警告が出たときに適切に判断できます。
3. ポートフォワーディングを試す
踏み台サーバー経由でどこかに繋ぐ環境があれば、ポートフォワーディングを試してみてください。「SSHがトンネルを作る」という感覚が体験として入ると、ProxyJumpや多段SSHの理解がスムーズになります。本記事のまとめ
| ポイント | 内容 |
|---|---|
| SSHの本質 | 暗号化されたトンネルで「信頼の確立」を行う仕組み |
| known_hostsの意味 | 接続先サーバーの正当性を確認するための記録 |
| 公開鍵認証の優位性 | 秘密鍵がネットワーク上を流れないため、盗聴されてもパスワードが漏れない |
| ポートフォワーディング | SSHを「ログインツール」ではなく「安全な通信路」として活用する代表例 |
| 現場で差がつく点 | 「繋がった」で終わらず「なぜ繋がるか」を語れるかどうか |
SSHの手順については、以下の記事も参考にしてください。
・LinuxへのSSH接続入門|初心者でも安全にリモートサーバーにつなぐ方法
・sshd_configの設定ガイド|Port変更・rootログイン禁止・鍵認証設定の手順
「SSHで繋がらない」時のトラブル切り分け手順
理解が深まったところで、よくあるSSHトラブルの切り分け手順を整理しておきます。# 1. まず疎通確認(ポートが開いているか) ssh -v user@192.168.x.x # 2. sshdが動いているか確認(サーバー側で実行) # systemctl status sshd # 3. ファイアウォールでポートが開いているか確認(サーバー側) # firewall-cmd --list-all # 4. known_hostsの警告が出た場合(ホスト鍵の変更確認後に実行) # ssh-keygen -R 192.168.x.x
・Permission denied(パスワード認証):パスワードが違う、またはパスワード認証が無効になっている
・Permission denied(公開鍵):authorized_keysのパーミッション、またはホームディレクトリの権限が広すぎる
・Connection refused:sshdが起動していない、またはファイアウォールでブロックされている
・Connection timed out:ネットワーク経路の問題、またはホストが存在しない
【注意】Permission deniedが出た場合にとりあえず「chmod 777」を試す人がいますが、これは逆効果です。SSHは権限が広すぎるファイルを意図的に拒否する設計になっています。
セミナーでよく受ける質問が「authorized_keysに登録したのに繋がらない」というもの。最初に確認するのは `~/.ssh/` ディレクトリとファイルのパーミッションです。
# 推奨パーミッション(SSHが要求する設定) # ~/.ssh/ → 700 # ~/.ssh/authorized_keys → 600 # ~/.ssh/id_rsa → 600(秘密鍵) ls -la ~/.ssh/
SSHを含むLinuxの「現場で使える技術」を体系的に身につけませんか?
「コマンドは覚えたつもりだが、いざという時に使いこなせない」という壁を超えるには、実際に手を動かす環境が必要です。ネットの断片情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:Linux学習を毎日続けるための習慣術|現役講師が語る「消えない力」の作り方
- 前のページへ:Linuxでvimが使えるようになった日のことを忘れない|現役講師が語るエディタ習得が思考スピードを変えた経験
- この記事の属するカテゴリ:Linux学習ガイドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます