【初心者向け】SSHとは?安全にサーバーへ接続する仕組みをやさしく解説
IT業務でLinuxサーバーやクラウド環境を扱うと、SSHという言葉を頻繁に目にします。
「SSHは何をするためのもの?」
「パスワードでログインするのと何が違うの?」
「公開鍵と秘密鍵はどう使うの?」
このような疑問を持つIT業務初心者の方は少なくありません。
SSHとは、ネットワーク越しにサーバーへ安全に接続し、遠隔操作するための仕組みです。
この記事では、SSHの基本、接続の流れ、パスワード認証と公開鍵認証の違い、実際のIT業務での使われ方まで初心者向けに分かりやすく解説します。
- SSHとは?
- SSHを一言で表すと?
- SSHでできること
- 実際のIT業務ではどのように使われる?
- SSHの基本コマンド
- ユーザー名とは?
- SSHのポート番号
- SSHの通信は暗号化される
- SSHクライアントとSSHサーバー
- SSHの主な認証方法
- パスワード認証とは?
- 公開鍵認証とは?
- 公開鍵認証を身近な例で考えてみよう
- 公開鍵と秘密鍵の違い
- SSH鍵の作成方法
- 秘密鍵にパスフレーズを設定する
- 公開鍵はどこへ登録する?
- 秘密鍵を指定して接続する方法
- known_hostsとは?
- ホスト鍵とは?
- ホスト鍵が変わったという警告
- SSH設定ファイルとは?
- SCPとは?
- SFTPとは?
- SSHとFTPの違い
- SSHとRDPの違い
- SSHとTelnetの違い
- SSHポートフォワーディングとは?
- ローカルポートフォワーディングとは?
- 踏み台サーバーとは?
- ProxyJumpとは?
- GitとSSHの関係
- SSH Agentとは?
- rootユーザーでのSSH接続
- SSHを安全に利用するための基本
- ポート番号を変更すれば安全になる?
- SSH接続できないときの主な原因
- よくあるエラーメッセージ
- クラウドサービスとSSH
- SSHを使わない接続方法もある
- SSHとVPNの違い
- IT業務初心者が覚えておきたいポイント
- 関連して覚えておきたい用語
- まとめ
SSHとは?
SSHは、Secure Shellの略です。
ネットワークを通じて、離れた場所にあるサーバーへ安全にログインし、コマンドを実行するための通信プロトコルです。
プロトコルとは、コンピューター同士が通信するときに使うルールのことです。
自分のパソコン ↓ SSHで安全に接続 サーバー
SSHを使うと、サーバーの前に直接座らなくても、手元のパソコンから操作できます。
SSHを一言で表すと?
SSHを一言で表すと、サーバーへ安全に入るための遠隔操作用の入口です。
会社の建物へ入るときに、社員証や鍵を使って本人確認をするように、SSHでも認証を行ってからサーバーへ接続します。
さらに、接続中の通信内容も暗号化されるため、入力したコマンドやパスワードなどを第三者に盗み見られにくくできます。
SSHでできること
SSHを利用すると、主に次のことができます。
- Linuxサーバーへログインする
- コマンドを実行する
- 設定ファイルを編集する
- アプリケーションを起動・停止する
- ログを確認する
- ファイルを転送する
- ポートフォワーディングを行う
- Gitリポジトリへ接続する
実際のIT業務ではどのように使われる?
例えば、クラウド上のLinuxサーバーへ接続する場合です。
- 手元のパソコンでターミナルを開く
- SSHコマンドを実行する
- サーバー側で本人確認が行われる
- 接続に成功する
- サーバー上でコマンドを実行する
担当者のパソコン ↓ SSH クラウド上のLinuxサーバー ↓ ログ確認・設定変更・アプリ操作
AWS EC2、Azure VM、Google Compute Engineなどの仮想マシンへ接続するときにもSSHがよく利用されます。
SSHの基本コマンド
SSHでサーバーへ接続する基本的なコマンドは次のとおりです。
ssh ユーザー名@サーバーのIPアドレス
例えば、ユーザー名がuser、IPアドレスが192.0.2.10の場合は次のようになります。
ssh user@192.0.2.10
ドメイン名を使って接続することもできます。
ssh user@example.com
ユーザー名とは?
SSHで接続するときは、サーバー上に存在するユーザーを指定します。
例えば、次のようなユーザー名があります。
- ubuntu
- ec2-user
- azureuser
- admin
- root
利用するクラウドやOSによって、初期ユーザー名が異なります。
SSHのポート番号
SSHでは、標準的に22番ポートを使用します。
| 通信 | 代表的なポート番号 |
|---|---|
| SSH | 22 |
| HTTP | 80 |
| HTTPS | 443 |
サーバー側のファイアウォールやクラウドのセキュリティ設定で、22番ポートへの接続が許可されていないとSSH接続できません。
SSHの通信は暗号化される
SSHでは、クライアントとサーバーの間の通信が暗号化されます。
例えば、次の情報が保護されます。
- ログイン時の認証情報
- 入力したコマンド
- コマンドの実行結果
- 転送するファイル
- サーバーとの通信内容
通信途中で第三者にデータを取得されても、内容を簡単には読めません。
SSHクライアントとSSHサーバー
SSH接続には、主に次の2つが必要です。
| 役割 | 説明 |
|---|---|
| SSHクライアント | サーバーへ接続する側 |
| SSHサーバー | 接続を受け付ける側 |
自分のパソコンがSSHクライアント、接続先のLinuxサーバーがSSHサーバーになります。
SSHクライアント ↓ SSHサーバー
Linuxでは、SSHサーバーとしてOpenSSH Serverが利用されることが多くあります。
SSHの主な認証方法
SSHでは、主に次の認証方法が使われます。
- パスワード認証
- 公開鍵認証
パスワード認証とは?
パスワード認証は、ユーザー名とパスワードを使ってログインする方法です。
ユーザー名 + パスワード ↓ 本人確認 ↓ SSH接続
パスワード認証のメリット
- 仕組みが分かりやすい
- 鍵ファイルを用意しなくても使える
- 初心者でも始めやすい
パスワード認証の注意点
- 弱いパスワードは推測される可能性がある
- 総当たり攻撃の対象になりやすい
- パスワードの使い回しは危険
- 自動処理には向かない場合がある
本番環境では、パスワード認証を無効にし、公開鍵認証を利用する構成がよく採用されます。
公開鍵認証とは?
公開鍵認証は、公開鍵と秘密鍵という2つの鍵を使って本人確認する方法です。
- 公開鍵:接続先のサーバーへ登録する
- 秘密鍵:自分のパソコンで安全に管理する
自分のパソコン └─ 秘密鍵 接続先サーバー └─ 公開鍵
接続時に、秘密鍵を持っていることを証明できればログインできます。
秘密鍵そのものをネットワークへ送信するわけではありません。
公開鍵認証を身近な例で考えてみよう
公開鍵認証は、南京錠と専用の鍵を使うイメージです。
サーバー側には南京錠に相当する公開鍵を登録します。
利用者は、その南京錠を開けられる秘密鍵を持っています。
正しい秘密鍵を持つ人だけが本人として認められます。
公開鍵と秘密鍵の違い
| 項目 | 公開鍵 | 秘密鍵 |
|---|---|---|
| 保存場所 | 接続先サーバー | 利用者の端末 |
| 公開してよいか | 公開できる | 公開してはいけない |
| 役割 | 利用者を確認するために使う | 本人であることを証明する |
秘密鍵が漏れると、第三者に不正ログインされる可能性があります。
そのため、秘密鍵は厳重に管理する必要があります。
SSH鍵の作成方法
SSHの鍵ペアは、ssh-keygenコマンドで作成できます。
ssh-keygen
一般的には、より具体的に鍵方式を指定します。
ssh-keygen -t ed25519
実行すると、公開鍵と秘密鍵が作成されます。
秘密鍵 id_ed25519 公開鍵 id_ed25519.pub
拡張子が.pubのファイルが公開鍵です。
拡張子が付いていないファイルが秘密鍵です。
秘密鍵にパスフレーズを設定する
SSHの秘密鍵には、パスフレーズを設定できます。
パスフレーズは、秘密鍵を使用するときに入力する追加のパスワードです。
秘密鍵ファイルが盗まれた場合でも、パスフレーズがあれば不正利用を難しくできます。
業務で利用する秘密鍵には、可能であればパスフレーズを設定します。
公開鍵はどこへ登録する?
Linuxサーバーでは、接続先ユーザーのホームディレクトリにある次のファイルへ公開鍵を登録することが一般的です。
~/.ssh/authorized_keys
サーバーは、接続時に提示された情報と、authorized_keysに登録された公開鍵を使って本人確認を行います。
秘密鍵を指定して接続する方法
接続時に秘密鍵ファイルを指定する場合は、-iオプションを使います。
ssh -i ~/.ssh/id_ed25519 user@192.0.2.10
クラウドサービスからダウンロードした鍵ファイルを使う場合も、同様に指定します。
ssh -i server-key.pem user@192.0.2.10
known_hostsとは?
SSHで初めてサーバーへ接続すると、次のような確認が表示されることがあります。
Are you sure you want to continue connecting?
これは、接続先サーバーが本当に正しい相手か確認するためのものです。
接続を許可すると、サーバーの情報が次のファイルへ保存されます。
~/.ssh/known_hosts
次回以降の接続では、保存済みの情報と比較します。
ホスト鍵とは?
ホスト鍵とは、SSHサーバー自身を識別するための鍵です。
公開鍵認証で使う利用者の鍵とは別のものです。
| 鍵 | 確認する対象 |
|---|---|
| 利用者のSSH鍵 | 接続してきた利用者 |
| サーバーのホスト鍵 | 接続先のサーバー |
利用者の鍵は「誰が接続しているか」を確認し、ホスト鍵は「どのサーバーへ接続しているか」を確認します。
ホスト鍵が変わったという警告
以前接続したサーバーのホスト鍵と、現在のホスト鍵が異なる場合、警告が表示されます。
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
主な原因には、次のようなものがあります。
- サーバーを再構築した
- 同じIPアドレスへ別のサーバーを割り当てた
- ホスト鍵を更新した
- 第三者によるなりすましの可能性がある
警告が出た場合は、安易にknown_hostsの情報を削除せず、サーバー管理者へ確認します。
SSH設定ファイルとは?
接続先が増えると、毎回長いSSHコマンドを入力するのが大変になります。
SSHクライアントの設定を、次のファイルへ記述できます。
~/.ssh/config
例えば、次のように設定します。
Host development-server
HostName 192.0.2.10
User ubuntu
IdentityFile ~/.ssh/id_ed25519
Port 22
設定後は、短いコマンドで接続できます。
ssh development-server
SCPとは?
SCPは、SSHの仕組みを利用してファイルを安全に転送するコマンドです。
自分のパソコンからサーバーへファイルを送る例です。
scp sample.txt user@192.0.2.10:/home/user/
サーバーから自分のパソコンへファイルを取得する例です。
scp user@192.0.2.10:/home/user/sample.txt ./
通信内容はSSHによって保護されます。
SFTPとは?
SFTPは、SSHを利用して安全にファイルを転送・管理する仕組みです。
SFTPは、SSH File Transfer Protocolの略として扱われます。
SFTPでは、次のような操作ができます。
- ファイルのアップロード
- ファイルのダウンロード
- ディレクトリの作成
- ファイルの削除
- ファイル一覧の確認
SFTPはFTPとは異なり、SSHを利用して通信を暗号化します。
SSHとFTPの違い
| 項目 | SSH・SFTP | FTP |
|---|---|---|
| 主な用途 | 遠隔操作・安全なファイル転送 | ファイル転送 |
| 通信の暗号化 | 暗号化される | 通常のFTPは暗号化されない |
| 代表的なポート | 22 | 21 |
ファイル転送では、通常のFTPではなくSFTPなどの安全な方法を利用します。
SSHとRDPの違い
RDPは、Windowsの画面を遠隔操作するために使われる仕組みです。
| 項目 | SSH | RDP |
|---|---|---|
| 主な対象 | Linux・Unix系サーバー | Windows |
| 操作方法 | コマンド操作が中心 | 画面操作が中心 |
| 代表的なポート | 22 | 3389 |
LinuxサーバーではSSH、WindowsサーバーではRDPがよく利用されます。
SSHとTelnetの違い
Telnetは、以前使われていた遠隔接続の仕組みです。
| 項目 | SSH | Telnet |
|---|---|---|
| 通信の暗号化 | 暗号化される | 暗号化されない |
| 安全性 | 高い | 低い |
| 現在の利用 | 広く利用される | 限定的 |
Telnetではパスワードやコマンドが平文で流れるため、遠隔操作にはSSHを利用します。
SSHポートフォワーディングとは?
SSHポートフォワーディングとは、SSH接続を通して別の通信を安全に転送する仕組みです。
SSHトンネルと呼ばれることもあります。
自分のパソコン ↓ SSHトンネル 踏み台サーバー ↓ 内部のデータベース
外部から直接接続できないデータベースや社内システムへ、安全にアクセスするために利用されます。
ローカルポートフォワーディングとは?
ローカルポートフォワーディングは、自分のパソコンのポートを、SSHサーバー経由で別の接続先へ転送する方法です。
ssh -L 13306:database.internal:3306 user@bastion.example.com
この例では、自分のパソコンの13306番ポートへの通信を、踏み台サーバー経由でデータベースの3306番ポートへ転送します。
踏み台サーバーとは?
踏み台サーバーとは、外部ネットワークから内部サーバーへ接続する際の中継地点となるサーバーです。
英語では、Bastion HostやJump Serverと呼ばれます。
管理者 ↓ SSH 踏み台サーバー ↓ SSH 内部サーバー
内部サーバーをインターネットへ直接公開せずに管理できます。
ProxyJumpとは?
ProxyJumpは、踏み台サーバーを経由して内部サーバーへ接続するためのSSH機能です。
ssh -J user@bastion.example.com user@internal.example.com
SSH設定ファイルへ登録することもできます。
Host internal-server
HostName internal.example.com
User user
ProxyJump user@bastion.example.com
GitとSSHの関係
GitHubやGitLabなどのGitサービスへ接続するときにもSSHを利用できます。
SSH公開鍵をGitサービスへ登録すると、パスワードを毎回入力せずにリポジトリへ接続できます。
手元のパソコン ↓ SSH GitHub・GitLab
例えば、SSH形式のリポジトリURLは次のようになります。
git@example.com:team/project.git
SSH Agentとは?
SSH Agentは、秘密鍵を一時的に安全な状態で保持し、接続時の認証を補助する仕組みです。
パスフレーズ付きの秘密鍵を利用する場合でも、毎回パスフレーズを入力する手間を減らせます。
ただし、端末が不正利用された場合の影響も考え、適切に管理する必要があります。
rootユーザーでのSSH接続
rootは、Linuxで非常に強い権限を持つ管理者ユーザーです。
rootユーザーでインターネットから直接SSHログインできる状態は、セキュリティ上のリスクになります。
一般的には、次のように運用します。
- 一般ユーザーでSSH接続する
- 必要な操作だけsudoを使用する
- rootの直接ログインを無効にする
SSHを安全に利用するための基本
公開鍵認証を利用する
本番環境では、パスワード認証より公開鍵認証を優先します。
秘密鍵を共有しない
複数人で同じ秘密鍵を使い回さず、利用者ごとに異なる鍵を発行します。
秘密鍵へ適切な権限を設定する
秘密鍵を他の利用者が読める状態にしないようにします。
LinuxやmacOSでは、次のように権限を設定する場合があります。
chmod 600 ~/.ssh/id_ed25519
接続元IPアドレスを制限する
クラウドのファイアウォールやセキュリティグループで、SSH接続を許可するIPアドレスを限定します。
rootの直接ログインを無効にする
強い権限を持つrootユーザーでの直接接続を避けます。
不要なSSHポートを公開しない
インターネットからのSSH接続が不要なら、22番ポートを外部へ公開しないようにします。
ログを監視する
不審なログイン試行や失敗回数を確認します。
ポート番号を変更すれば安全になる?
SSHのポート番号を22番以外へ変更すると、自動的な攻撃や大量のログを減らせる場合があります。
ただし、ポート番号を変更しただけでは十分なセキュリティ対策にはなりません。
公開鍵認証、接続元制限、多要素認証、ログ監視などと組み合わせる必要があります。
SSH接続できないときの主な原因
- サーバーが停止している
- IPアドレスやホスト名が間違っている
- ユーザー名が間違っている
- 22番ポートが許可されていない
- SSHサーバーが起動していない
- 秘密鍵が正しくない
- 公開鍵がサーバーへ登録されていない
- 秘密鍵のファイル権限が適切でない
- ネットワーク経路に問題がある
- 接続元IPアドレスが制限されている
よくあるエラーメッセージ
Connection timed out
接続先まで通信が届いていない可能性があります。
IPアドレス、ファイアウォール、セキュリティグループ、ルート設定などを確認します。
Connection refused
接続先には届いていますが、SSHサービスが待ち受けていない可能性があります。
SSHサーバーの起動状態やポート番号を確認します。
Permission denied
認証に失敗しています。
ユーザー名、パスワード、秘密鍵、公開鍵の登録状態などを確認します。
Host key verification failed
known_hostsに保存されているホスト鍵と、現在のサーバーのホスト鍵が一致していません。
サーバーの再構築など正当な理由か、なりすましの可能性がないか確認します。
クラウドサービスとSSH
AWS、Microsoft Azure、Google Cloudでは、Linux仮想マシンへの接続にSSHが利用されます。
代表的な例は次のとおりです。
- AWS EC2
- Azure Virtual Machines
- Google Compute Engine
クラウドでは、SSH鍵、ファイアウォール、ネットワーク、IAM権限などを組み合わせて接続を管理します。
SSHを使わない接続方法もある
クラウドサービスによっては、22番ポートをインターネットへ公開せずにサーバーを管理できる仕組みがあります。
例えば、次のようなサービスです。
- AWS Systems Manager Session Manager
- Azure Bastion
- Google CloudのブラウザーSSHやIAP
インターネットへSSHポートを直接公開しない構成は、セキュリティ向上につながります。
SSHとVPNの違い
| 項目 | SSH | VPN |
|---|---|---|
| 主な用途 | サーバーの遠隔操作 | ネットワーク全体への安全な接続 |
| 保護対象 | SSHを通る通信 | 端末や拠点のネットワーク通信 |
| 利用例 | Linuxサーバー管理 | 社内ネットワークへの接続 |
VPN接続後にSSHを使って内部サーバーへ接続する構成もあります。
IT業務初心者が覚えておきたいポイント
- SSHはサーバーへ安全に遠隔接続する仕組み
- Secure Shellの略
- 標準的なポート番号は22
- 通信内容は暗号化される
- パスワード認証と公開鍵認証がある
- 本番環境では公開鍵認証がよく使われる
- 公開鍵はサーバーへ登録する
- 秘密鍵は利用者の端末で厳重に管理する
- ホスト鍵で接続先サーバーを確認する
- SCPやSFTPで安全にファイルを転送できる
- 踏み台サーバーやポートフォワーディングにも利用される
- 接続元IP制限やログ監視も重要
関連して覚えておきたい用語
- 公開鍵
- 秘密鍵
- 公開鍵認証
- パスワード認証
- ホスト鍵
- known_hosts
- authorized_keys
- OpenSSH
- SCP
- SFTP
- ポート番号22
- 踏み台サーバー
- SSHトンネル
- ポートフォワーディング
- RDP
- VPN
まとめ
SSHとは、ネットワーク越しにサーバーへ安全に接続し、遠隔操作するための仕組みです。
主にLinuxサーバーの管理で利用され、コマンド実行、ログ確認、設定変更、ファイル転送などを行えます。
SSHでは通信内容が暗号化され、パスワード認証や公開鍵認証によって利用者を確認します。
実際の業務では、公開鍵認証、接続元IPアドレスの制限、秘密鍵の安全な管理、rootログインの禁止などを組み合わせて運用します。
まずは、「SSHは、離れた場所にあるサーバーへ安全にログインして操作する仕組み」と理解しておきましょう。
