「ターミナルに謎の文字列を貼り付けたら接続できたけれど、何をやったのか意味がわかっていない。」
SSHは、Linuxを使う上で最初に必ずぶつかる壁です。クラウドのVPSを借りた人も、自宅でRaspberry Piを使っている人も、WSL2でサーバーを立てた人も、「SSHで接続してください」という手順を踏まなければ先に進めません。
この記事では、SSH接続の仕組みを初心者でもわかるように丁寧に解説します。
「コマンドを丸暗記するだけ」ではなく、何が起きているのかを理解した上で使えるよう、接続の仕組みから鍵認証・パスワード認証の無効化まで順を追ってカバーします。
実行環境: Ubuntu 24.04 LTS / Rocky Linux 9.4 / macOS Monterey以降で動作確認済み
この記事のポイント
・SSHはネット経由でLinuxサーバーを安全に操作するための仕組み
・基本コマンドは ssh ユーザー名@接続先 の形で覚える
・鍵認証(秘密鍵・公開鍵)はパスワード認証より安全な実務標準の接続方式
・鍵認証後はパスワード認証を無効化してセキュリティを完成させる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
SSHとは何か:リモート操作の仕組みを理解する
SSH(Secure Shell)は、離れた場所にあるLinuxサーバーをインターネット経由で安全に操作するための仕組みです。「Secure(安全)」という名の通り、通信内容がすべて暗号化されます。メールや昔のFTP(ファイル転送プロトコル)などがパスワードを「生」のテキストで送っていたのに対し、SSHではキーボードの入力からサーバーの出力まで、すべてが暗号化されて通信します。
日常の操作で例えると、次のようなイメージです。
・自分のPC:手元にある操作端末(SSHクライアント)
・サーバー:遠くにある機械(SSHサーバー)
・SSH:2つを結ぶ「暗号化された専用回線」
この仕組みを使うと、東京にいながら大阪のサーバーを操作したり、自宅のPCからAWSのクラウドサーバーを管理したりすることができます。インターネット黎明期に使われていたTelnetは通信が暗号化されておらず、パスワードが盗聴される危険がありました。SSHはその後継として登場し、現在ではすべてのLinuxサーバーで標準の接続方式になっています。
| 比較項目 | Telnet(古い接続方法) | SSH(現在の標準) |
|---|---|---|
| 通信の暗号化 | なし(平文で送信) | あり(全通信を暗号化) |
| パスワード保護 | 盗聴されると丸見え | 暗号化されるため安全 |
| 現在の利用状況 | ほぼ廃止 | すべてのLinuxサーバーで標準 |
基本的なSSH接続の使い方
1. SSHコマンドの基本形式
SSH接続の基本コマンドは次の形です。# 基本形式 ssh ユーザー名@接続先サーバー # 例:ユーザー名「tomo」でIPアドレス 192.168.1.100 のサーバーに接続 ssh tomo@192.168.1.100 # 例:ユーザー名「ec2-user」でAWSのサーバーに接続 ssh ec2-user@54.123.45.67
2. ポート番号を指定して接続する
SSHは標準でポート番号22番を使います。セキュリティ設定でポート番号を変更しているサーバーに接続する場合は、-pオプションでポートを指定します。# ポート番号を指定して接続(例:2222番ポート) ssh -p 2222 tomo@192.168.1.100
3. 接続を切断する
接続を終了するには、exitコマンドを入力するか、Ctrl+Dを押します。# 接続を切断する [tomo@server ~]$ exit # または Ctrl+D を押す
$や#の前の文字列)に「ホスト名」が表示されていたら、そのサーバーにログイン中です。exit後に自分のPCのプロンプトに戻ることを確認してください。SSH鍵認証:パスワードより安全な接続方法
SSH接続では、パスワード認証よりも「鍵認証(公開鍵認証)」を使う方が安全で便利です。実務の現場でも、鍵認証が標準です。インターネットに公開されたサーバーは、世界中の攻撃者から毎日24時間、自動的にパスワードを試し続けるプログラム(ブルートフォース攻撃)にさらされています。鍵認証では数学的な暗号を使うため、どれだけ試行されても突破できません。
| 比較項目 | パスワード認証 | SSH鍵認証 |
|---|---|---|
| 安全性 | 低い(総当たり攻撃に弱い) | 高い(数学的に破ることが極めて困難) |
| 設定の手軽さ | 簡単(設定不要) | 少し手間がかかる(初回のみ) |
| ログイン操作 | 毎回パスワード入力が必要 | パスフレーズなしなら自動接続も可能 |
| 本番サーバーでの推奨度 | 非推奨 | 必須 |
1. 公開鍵と秘密鍵の仕組みを理解する
鍵認証は「南京錠と鍵」のたとえでイメージするとわかりやすいです。・公開鍵(.pub):南京錠のようなもの。サーバー側に置く。誰に見られても問題ない
・秘密鍵:南京錠を開ける鍵。自分のPCにだけ保管し、絶対に人に渡さない
「公開鍵(南京錠)を持ったサーバー」に対して、「秘密鍵(鍵)を持ったPC」からのみ接続を許可する仕組みです。自分のPCが秘密鍵を使って「私が本人です」というデータを作り、サーバーが公開鍵でそれを検証します。秘密鍵を持っている本人以外はこのデータを作れないため、なりすましが不可能な仕組みになっています。
・公開鍵:サーバーに登録する / GitHubに登録する / 他人に送ってよい
・秘密鍵:自分のPCの外に出さない / 絶対に共有しない
2. SSH鍵ペアを作成する
鍵の生成は、自分のPC(接続元)で行います。Windows(WSL2含む)・Mac・Linuxいずれでも同じコマンドが使えます。# SSH鍵ペアを生成する(Ed25519形式。セキュリティ強度が高くおすすめ) ssh-keygen -t ed25519 -C "自分のメールアドレスや識別名" # 実行例 $ ssh-keygen -t ed25519 -C "tomo@example.com" Generating public/private ed25519 key pair. Enter file in which to save the key (/home/tomo/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/tomo/.ssh/id_ed25519 Your public key has been saved in /home/tomo/.ssh/id_ed25519.pub The key fingerprint is: SHA256:aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890abcde tomo@example.com
生成後は、ファイルが正しく作られているか確認しましょう。
# .sshディレクトリの内容を確認 ls -la ~/.ssh/ # 出力例 -rw------- 1 tomo tomo 411 May 15 10:00 id_ed25519 -rw-r--r-- 1 tomo tomo 103 May 15 10:00 id_ed25519.pub
・~/.ssh/id_ed25519:秘密鍵。自分のPCにだけ保管する(絶対に公開しない)
・~/.ssh/id_ed25519.pub:公開鍵。サーバー側に設置するファイル
古いサーバーがEd25519に対応していない場合は、RSA形式を使います。
# RSA 4096ビットで生成(Ed25519が使えない場合のみ) ssh-keygen -t rsa -b 4096 -C "tomo@example.com"
3. 公開鍵をサーバーに登録する
生成した公開鍵(.pubファイルの内容)を、接続先サーバーの~/.ssh/authorized_keys というファイルに追記します。# ssh-copy-idコマンドを使うと自動で登録できる(おすすめ) ssh-copy-id -i ~/.ssh/id_ed25519.pub tomo@192.168.1.100 # 実行例 /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s) /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed tomo@192.168.1.100's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'tomo@192.168.1.100'" and check to make sure that only the key(s) you wanted were added. # 登録後は鍵認証で接続できる(パスワード不要) ssh tomo@192.168.1.100
ssh-copy-idコマンドが使えない環境(Windowsのcmd.exe・VPSコンソールからのみアクセス可能なケースなど)では、サーバー側で手動登録します。# サーバー側で実行する(手動登録の手順) # 1. .sshディレクトリを作成してパーミッションを設定 mkdir -p ~/.ssh chmod 700 ~/.ssh # 2. authorized_keysファイルに公開鍵の内容を追記 # 自分のPCで「cat ~/.ssh/id_ed25519.pub」を実行して表示される内容をコピーして貼り付ける echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA..." | tee -a ~/.ssh/authorized_keys # 3. パーミッションを設定 chmod 600 ~/.ssh/authorized_keys
# 鍵認証でSSH接続を試みる ssh -i ~/.ssh/id_ed25519 tomo@192.168.1.100 # パスワードなしでログインできれば成功 Last login: Thu May 15 09:00:00 2026 from 192.0.2.1 [tomo@server ~]$
パスワード認証を無効にしてセキュリティを強化する
鍵認証でログインできることを確認したら、次はパスワード認証を無効にします。これにより、鍵を持っていない攻撃者は一切ログインできなくなります。【重要】この設定は「鍵認証でログインできることを確認した後」に行ってください。パスワード認証を無効にすると、秘密鍵のないPCからは一切ログインできなくなります。設定ミスで締め出された場合はVPSの管理コンソールから復旧が必要になります。
1. sshd_configを編集する
# SSHデーモンの設定ファイルを編集 sudo nano /etc/ssh/sshd_config
# 変更箇所(/etc/ssh/sshd_config) # パスワード認証を無効化 PasswordAuthentication no # rootでの直接ログインを禁止 PermitRootLogin no # 公開鍵認証が有効になっていることを確認 PubkeyAuthentication yes
2. SSHサービスを再起動する
# 設定を反映させるためにSSHサービスを再起動 sudo systemctl restart sshd # サービスが正常に起動しているか確認 sudo systemctl status sshd # 出力例(active (running)になっていれば正常) sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled) Active: active (running) since Thu 2026-05-15 10:00:00 JST
3. 別のターミナルで接続確認する(重要)
現在のSSHセッションを切らずに、別のターミナルウィンドウを開いて接続を確認します。現在のセッションを保ったまま作業することで、万一設定ミスがあっても元のセッションから修正できます。# 新しいターミナルで鍵認証による接続テスト ssh tomo@192.168.1.100 # パスワード認証が完全に無効化されていれば以下のエラーが出る(正常) # tomo@192.168.1.100: Permission denied (publickey). # 鍵認証では問題なくログインできることを確認 ssh -i ~/.ssh/id_ed25519 tomo@192.168.1.100
接続設定を.ssh/configファイルにまとめる
接続先が増えてきたとき、毎回「長いIPアドレスとユーザー名」を打つのは大変です。~/.ssh/configファイルにまとめておくと、短いニックネームで接続できるようになります。# ~/.ssh/config の記述例 Host myserver HostName 192.168.1.100 User tomo Port 22 IdentityFile ~/.ssh/id_ed25519 # Webサーバー(さくらのVPS) Host sakura-vps HostName sv12345.sakura.ne.jp User ubuntu IdentityFile ~/.ssh/id_ed25519 # AWSのEC2インスタンス Host aws-dev HostName 54.123.45.67 User ec2-user IdentityFile ~/.ssh/aws-key.pem
# 設定前(毎回この形式で入力) ssh -i ~/.ssh/id_ed25519 tomo@192.168.1.100 # 設定後(ニックネームだけでOK) ssh myserver
# configファイルのパーミッションを設定(所有者のみ読み書き可能) chmod 600 ~/.ssh/config
~/.ssh/config の活用は鉄則です。複数のサーバーを管理するエンジニアほど、このファイルを丁寧に整備しています。「接続できない」時のトラブルシュート
SSH接続でつまずく原因は、実際にはほぼ4パターンに絞られます。順番に確認していきましょう。1. ホスト名・IPアドレスの確認
「Connection refused」や「No route to host」というエラーが出た場合は、接続先の情報を確認してください。# エラー例 ssh: connect to host 192.168.1.200 port 22: Connection refused # 確認事項 # 1. IPアドレスやホスト名が正しいか # 2. サーバーが起動しているか(pingで確認) ping 192.168.1.200 # 3. SSHサービスが起動しているか(サーバー側で確認) systemctl status sshd
2. 鍵認証のパーミッション設定
鍵認証を手動で設定した場合、パーミッション(権限)が正しくないと接続が拒否されます。これは初心者がよくハマるポイントです。# サーバー側(~/.sshと~/.ssh/authorized_keysのパーミッション) # 注意:設定が緩すぎると鍵認証が機能しない # .sshディレクトリ:700(自分のみ読み書き実行) chmod 700 ~/.ssh # authorized_keysファイル:600(自分のみ読み書き) chmod 600 ~/.ssh/authorized_keys # 自分のPC側(秘密鍵):600または400の権限にしないとエラーになる chmod 600 ~/.ssh/id_ed25519 # 接続時に詳細ログを出して原因を絞り込む ssh -v tomo@192.168.1.100
3. ファイアウォールの確認
サーバー側のファイアウォール(firewalld、ufw)でSSHポート(22番)が開放されているか確認します。# Rocky Linux / RHEL系(firewalld) firewall-cmd --list-all | grep ssh # Ubuntu系(ufw) ufw status | grep 22 # クラウドの場合はVPSコントロールパネルの「セキュリティグループ」や # 「ファイアウォール設定」でポート22が開放されているか確認する
4. 「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」エラー
サーバーを再構築したあとや、同じIPアドレスに別のサーバーを割り当てた後によく出るエラーです。SSHは接続先サーバーの「フィンガープリント(指紋)」を記憶しており、前回と異なると警告を出します。# エラー例 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ # 対処:known_hostsから該当サーバーのエントリを削除する ssh-keygen -R 192.168.1.100 # 再接続すると新しいフィンガープリントの確認メッセージが出る # 「yes」と答えると接続できるようになる
本記事のまとめ
SSH接続は最初は難しく感じますが、仕組みを理解すれば「暗号化された安全なリモートコントロール」だとわかります。まずは次の3ステップを実践してみてください。
・STEP1:
ssh ユーザー名@サーバーIP でパスワード接続を試みる・STEP2:
ssh-keygenで鍵ペアを作り、ssh-copy-idで公開鍵を登録して鍵認証に切り替える・STEP3:
sshd_configでパスワード認証を無効化し、~/.ssh/configでサーバー接続を整理するSSHが使えるようになれば、クラウドサーバーの操作・自動化スクリプトの実行・ファイル転送(SCPやSFTP)など、Linuxの実務スキルを一気に広げることができます。
| やりたいこと | コマンド |
|---|---|
| パスワードでSSH接続する | ssh ユーザー名@接続先 |
| ポート番号を指定して接続する | ssh -p 2222 ユーザー名@接続先 |
| SSH鍵ペアを生成する | ssh-keygen -t ed25519 -C "識別名" |
| 公開鍵をサーバーに登録する | ssh-copy-id -i ~/.ssh/id_ed25519.pub ユーザー名@接続先 |
| 鍵認証で接続する | ssh -i ~/.ssh/id_ed25519 ユーザー名@接続先 |
| パスワード認証を無効にする | sshd_config の PasswordAuthentication を no に変更 |
| 接続設定をニックネームで管理する | ~/.ssh/config に Host 設定を記述 |
| 接続を切断する | exit または Ctrl+D |
| ホスト指紋エラーを解消する | ssh-keygen -R サーバーIP |
実践的なスキルを身につけるために読む記事
SSH接続が使えるようになったら、次はサーバー上でのLinuxコマンド操作を身につけましょう。以下の7つのテーマで、実務で使えるLinuxスキルをステップアップできます。
・Linuxコマンド:catコマンドでファイル内容を表示する方法 ~ ファイルの中身を確認する基本操作
・シェルスクリプト:crontabコマンドの設定と書き方 ~ 定期的な作業を自動化する方法
・セキュリティ:chmodコマンドで権限を変更する方法 ~ ファイルを守る権限設定の基本
・サーバー構築:systemctlコマンドでサービスを管理する方法 ~ サーバーの起動・停止を制御する
・ネットワーク:pingコマンドの使い方 ~ ネットワークの疎通を確認する基本手順
・ディスク管理:dfコマンドでディスク容量を確認する方法 ~ ストレージの空き状況を把握する
・現場Tips:historyコマンドでコマンド履歴を確認する方法 ~ 過去に実行したコマンドを振り返る
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
SSH接続の基本を押さえたら、ぜひ次のステップとして実務で使えるサーバー構築スキルを身につけてみてください。
無料マニュアルを受け取る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:Linuxのプロセス入門|バックグラウンド・フォアグラウンドの違いとps・pgrepでの確認方法
- 前のページへ:Linuxのシェル入門|bashとzshの違いとプロンプトの読み方を初心者向けに解説
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

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