サーバーに安全にログインする方法はご存じでしょうか。
日常的にLinuxを触っていると、SSHという言葉を必ず耳にします。
しかし「仕組みがよく分からないままパスワードを入力して接続している」という方も少なくありません。
そもそもSSHとはどのような技術で、なぜパスワードを入力するだけでリモートのサーバーにアクセスできるのでしょうか。
そして、より安全な方法として広く使われている「公開鍵認証」とは、具体的にどのような流れで動いているのでしょうか。
この記事では、SSHの基本的な仕組みを確認しつつ、公開鍵認証の導入手順や設定方法までを整理して解説します。
セキュリティを強化したい管理者や、これから本格的にLinuxを学びたい方に役立つ内容を目指します。
Linuxの基礎知識
SSHとは?
サーバー管理やリモート作業を行う際に欠かせないのがSSHです。インターネット経由でサーバーに安全に接続し、コマンドを実行できる仕組みを提供します。特にセキュリティ面を重視するLinux環境では、SSHの正しい理解が必須となります。
ここではSSHの基本概要や、やり取りされる情報、パスワード認証との違いについて整理します。
基本概要
SSH(Secure Shell)は、暗号化された通信経路を通じてリモートのサーバーへログインし、操作を可能にするプロトコルです。従来のTelnetのように平文で認証情報をやり取りするのではなく、公開鍵暗号方式を利用して盗聴や改ざんを防ぎます。
一般的にはLinuxサーバーにログインしてコマンドを実行する際に利用されます。
ssh ユーザー名@ホスト名
例えば、上記コマンドを実行すると、指定したサーバーに接続しログインが試みられます。
【出力例:】
[user@localhost ~]$ ssh testuser@192.168.1.10
testuser@192.168.1.10's password:
Last login: Sun Sep 7 10:00:00 2025 from 192.168.1.5
[testuser@server ~]$
通信で収集・取得できる情報の種類
SSH通信を利用すると、管理者はリモートのサーバーに接続し、さまざまな情報を取得できます。例えば、システムの稼働状況やログファイルの確認、設定ファイルの編集などです。暗号化通信によってこれらの操作内容や出力結果が安全にやり取りされるため、第三者に漏れることはありません。
ssh user@192.168.1.10 "uptime"
【出力例:】
10:30:15 up 5 days, 2:13, 2 users, load average: 0.05, 0.03, 0.00
このように、接続先サーバーの負荷状況や稼働時間を直接確認できます。
利用するメリット(パスワード認証との違い)
SSHを利用する最大のメリットは「安全性」です。パスワード認証は簡単に導入できますが、総当たり攻撃や盗聴のリスクが残ります。これに対して公開鍵認証を組み合わせたSSHでは、秘密鍵を持つユーザーのみがアクセスでき、さらにログイン試行時も暗号化が行われます。
代表的な違いを以下の表にまとめます。
| 認証方式 | 特徴 | セキュリティ |
|---|---|---|
| パスワード認証 | ユーザー名とパスワードを入力 | 総当たり攻撃に弱い |
| 公開鍵認証 | 秘密鍵と公開鍵のペアを利用 | 盗聴に強く、安全性が高い |
このように公開鍵認証を使えば、セキュリティを一段と高めることが可能です。
パスワード認証と鍵認証
VPSなどの初期状態では、パスワード認証が有効になっている場合があります。契約直後に鍵をまだ用意していなくてもログインできるようにするためです。ただし、パスワードは総当たり攻撃の対象になりやすく、安全性は高くありません。
そのため、本番運用では公開鍵認証へ切り替えるのが一般的です。鍵認証を利用すれば、秘密鍵を持っているユーザーだけが接続できる仕組みになるため、セキュリティが格段に向上します。
SSHの導入手順
SSHを利用するためには、まずサーバーとクライアント双方に必要なパッケージを導入する必要があります。Linuxディストリビューションごとにインストール方法は異なりますが、主要な環境では標準リポジトリから簡単に導入できます。
ここではRHEL系Linuxを前提に、基本的な導入方法と初期接続の流れを解説します。
パッケージのインストール方法
RHEL系Linuxでは、OpenSSHが標準的に利用されます。管理者権限で以下のコマンドを実行することで、SSHサーバーを導入できます。
sudo dnf install -y openssh-server
【出力例:】
Dependencies resolved.
=================================================================
Package Architecture Version Repository
=================================================================
Installing:
openssh-server x86_64 8.7p1-38.el9 baseos
... Installed:
openssh-server-8.7p1-38.el9.x86_64
Complete!
インストール後は、sshdサービスを有効化し起動します。
sudo systemctl enable sshd
sudo systemctl start sshd
【出力例:】
Created symlink /etc/systemd/system/multi-user.target.wants/sshd.service → /usr/lib/systemd/system/sshd.service.
これでSSHサーバーが動作し、接続を受け付けられる状態になります。
SSHログインの基本的な使い方
SSHを利用したサーバーへのログインは、日常的な管理作業で最も多く使われる操作の一つです。ここではよく使うオプションや、認証方式ごとの接続方法を整理して解説します。これらを理解しておくことで、トラブルシュートや効率的な運用にも役立ちます。
SSHには便利なオプションが多数用意されています。以下に代表的なものをまとめます。
| オプション | 内容 |
|---|---|
| -p | 接続先ポート番号を指定 |
| -i | 秘密鍵ファイルを指定 |
| -v | 詳細なデバッグ情報を表示 |
| -L | ローカルポートフォワーディングを設定 |
| -R | リモートポートフォワーディングを設定 |
パスワード認証での接続
最も基本的なログイン方法は、ユーザー名とパスワードを利用する方法です。
ssh ユーザー名@ホスト名
【出力例:】
[user@localhost ~]$ ssh testuser@192.168.1.10
testuser@192.168.1.10's password:
Last login: Sun Sep 7 10:00:00 2025 from 192.168.1.5
[testuser@server ~]$
パスワード認証は簡単に利用できますが、総当たり攻撃の対象となりやすいため、セキュリティ面では公開鍵認証より劣ります。
公開鍵認証の接続

SSH公開鍵認証の流れ
- クライアントPCがSSHサーバーへ 接続要求 を送ります。
- サーバーはランダムな値(challenge)をクライアントへ返します。 ク
- ライアントは秘密鍵を使ってchallengeに対する 署名 を生成し、サーバーへ返送します。
- サーバーは登録済みの公開鍵で署名を検証し、正しければ 認証完了 としてログインを許可します。
公開鍵認証を設定済みであれば、秘密鍵を使ってログインできます。
この流れのポイントは「秘密鍵はクライアントPCから外に出ない」という点です。署名のみがやり取りされるため、安全に認証が行える仕組みになっています。
ssh -i ~/.ssh/id_rsa ユーザー名@ホスト名
【出力例:】
[user@localhost ~]$ ssh -i ~/.ssh/id_rsa testuser@192.168.1.10
Last login: Sun Sep 7 10:10:00 2025 from 192.168.1.5
[testuser@server ~]$
公開鍵認証を導入することで、パスワードを入力せずに安全に接続できるようになります。
特定ユーザーやホストへの接続指定
接続先が複数ある場合や、特定のユーザーで接続したい場合は、ユーザー名やホストを明示的に指定します。
ssh user01@192.168.1.20
【出力例:】
[user@localhost ~]$ ssh user01@192.168.1.20
user01@192.168.1.20's password:
Last login: Sun Sep 7 10:20:00 2025 from 192.168.1.5
[user01@server ~]$
また、ポート番号を変更しているサーバーに接続する場合は「-p」オプションを使います。
ssh -p 2222 user02@192.168.1.30
【出力例:】
[user@localhost ~]$ ssh -p 2222 user02@192.168.1.30
user02@192.168.1.30's password:
Last login: Sun Sep 7 10:30:00 2025 from 192.168.1.5
[user02@server ~]$
このようにオプションを使い分けることで、複数の環境に柔軟にログインできます。
公開鍵認証の設定方法
SSHを安全に利用するためには、パスワード認証よりも公開鍵認証を導入することが効果的です。
公開鍵認証を設定しておくと、自分が持っている秘密鍵だけでログインできるようになり、総当たり攻撃やパスワード漏洩のリスクを大幅に減らせます。
ここでは、鍵ペアの生成からサーバーへの登録、そして設定の確認までを順に解説します。
鍵ペアの生成手順
公開鍵認証を利用するには、まずクライアント側で鍵ペアを生成します。以下のコマンドを実行すると、ホームディレクトリ直下の「.ssh」ディレクトリに秘密鍵と公開鍵が作成されます。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
【出力例:】
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub
生成された「id_rsa」が秘密鍵、「id_rsa.pub」が公開鍵です。秘密鍵は絶対に他人に渡さないように管理します。
authorized_keysへの登録方法
次に、生成した公開鍵を接続先サーバーに登録します。登録はユーザーのホームディレクトリ配下にある「.ssh/authorized_keys」ファイルに追記することで行います。
ssh-copy-id -i ~/.ssh/id_rsa.pub user@192.168.1.10
【出力例:】
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/id_rsa.pub"
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'user@192.168.1.10'"
and check to make sure that only the key(s) you wanted were added.
この操作によって、サーバー側の「~/.ssh/authorized_keys」に公開鍵が登録されます。以降はパスワードを入力しなくても秘密鍵を利用してログインできるようになります。
sshd_configでの設定確認
最後に、サーバーのSSH設定ファイル「/etc/ssh/sshd_config」を確認します。
公開鍵認証を有効にするには、以下の項目が正しく設定されている必要があります。
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
【出力例:】
$ sudo vi /etc/ssh/sshd_config ... PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys ...
設定を変更した場合は、SSHサービスを再起動します。
sudo systemctl restart sshd
公開鍵認証が有効になれば、以後は秘密鍵を使った安全なログインが可能となります。これでSSHのセキュリティを強化した運用が実現できます。
SSHの応用と拡張
SSHはただログインするだけのツールではなく、便利な応用方法やセキュリティを高める拡張設定があります。これらを取り入れると、毎日の作業がぐっと楽になったり、安心してサーバーを運用できるようになります。
単なる知識として知っておくのではなく、実際に設定して使えるようになることが管理者にとって大きなメリットです。
configファイルによる接続簡略化
毎回長いコマンドを入力するのは面倒です。SSHの設定ファイル「~/.ssh/config」を利用すれば、サーバーごとに設定を登録して短いコマンドで接続できるようになります。これによって作業の手間が減り、誤入力のリスクも減ります。
vi ~/.ssh/config
【出力例:】
Host web01
HostName 192.168.1.10
User testuser
Port 22
IdentityFile ~/.ssh/id_rsa
設定後は次のように短く接続できます。
ssh web01
この仕組みを使うと、複数のサーバーを管理するときにとても便利です。
エージェント利用と鍵管理
秘密鍵を使った接続では、毎回パスフレーズを入力するのが負担になります。SSHエージェントを利用すれば、一度パスフレーズを入力するだけで、その後の接続では自動的に鍵を利用できるようになります。これによりセキュリティを保ちながら操作がスムーズになります。
エージェントを起動し、鍵を登録する例です。
eval $(ssh-agent) ssh-add ~/.ssh/id_rsa
【出力例:】
Agent pid 12345
Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)
こうすることで、鍵の安全性を維持しながらログインが一気に快適になります。
セキュリティ強化のための追加設定
SSHは便利ですが、初期状態のままでは不正アクセスの対象になりやすいです。少しの設定変更でセキュリティを強化できるので、必ず押さえておくべきポイントです。
設定ファイル「/etc/ssh/sshd_config」で以下のように変更します。
PermitRootLogin no
PasswordAuthentication no
Port 2222
【出力例:】
$ sudo vi /etc/ssh/sshd_config
…
PermitRootLogin no
PasswordAuthentication no
Port 2222
…
設定を変更したらSSHサービスを再起動します。
sudo systemctl restart sshd
これにより、攻撃の標的になりやすいrootログインを無効化し、パスワード攻撃を防ぎ、さらにポート変更で自動スキャンを避けることができます。結果として、不正アクセスのリスクを大幅に下げられるのが嬉しいポイントです。
SSH活用例
SSHは単にサーバーへログインするための仕組みではなく、日常の運用を効率化し、管理者の負担を大きく減らすための多彩な機能を持っています。これらを使いこなすと、日常的なサーバーメンテナンスからファイルのやり取り、さらには外部サービスとの安全な通信まで、幅広い場面で役立ちます。
サーバーメンテナンスでの利用
SSHを利用すると、物理的にサーバーの前にいなくても遠隔から安全に操作ができます。障害発生時や設定変更が必要なとき、すぐにログインして状況を確認できるのは大きなメリットです。
ssh user@192.168.1.10 "systemctl status httpd"
【出力例:】
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2025-09-07 09:00:00 JST; 1h 20min ago
Main PID: 1234 (httpd)
このように遠隔でサービスの稼働状況を確認できれば、トラブル対応のスピードが上がり、利用者への影響を最小限に抑えられます。
ファイル転送(scp, sftp)の活用例
scpとsftpはいずれもSSHに含まれるコマンドで、安全な通信路を利用してファイルを転送できます。FTPのように暗号化されない通信とは異なり、盗聴の心配がない点が大きなメリットです。
scpやsftpの基本コマンドはシンプルですが、オプションを活用すると転送の効率化や安全性が高まります。大きなファイルを中断しても再開できたり、進捗を確認できたりするのは日常運用で大きな助けになります。
| オプション | 内容 | メリット |
|---|---|---|
| -P | 接続先ポートを指定 | 22番以外のポートを使うサーバーに接続できる |
| -r | ディレクトリを再帰的に転送 | 大量のファイルをまとめて送れる |
| -C | 圧縮を有効化 | 回線が遅くても転送を高速化できる |
| -v | 詳細ログを表示 | 転送がうまくいかないときに原因調査がしやすい |
| -l | 帯域幅を制限 | 他の通信を圧迫せずにファイルを転送できる |
scp は常に 最初の引数が転送元、最後の引数が転送先 になります。
ここでは、オプションを組み合わせた実用的な例をH4ごとに紹介します。
scpの活用例(-P)
scpは一度のコマンド実行で完結するため、自動化スクリプトや定期バックアップに組み込みやすいのが特徴です。
scp -P 2222 ./app.log user@192.168.1.10:/home/user/
【出力例:】
app.log 100% 120KB 1.2MB/s 00:00
標準以外のポートで待ち受けるサーバーにも対応できるため、セキュリティ対策でポートを変更している環境でも利用できます。
scpの活用例(-r)
scp -r ./project/ user@192.168.1.10:/home/user/backup/
【出力例:】
project/file1.txt 100% 10KB 0.5MB/s 00:00
project/file2.txt 100% 25KB 0.7MB/s 00:00
ディレクトリを丸ごとコピーできるため、大量のファイルをバックアップするときに効率的です。
scpの活用例(-C)
scp -C ./largefile.iso user@192.168.1.10:/home/user/
【出力例:】
largefile.iso 100% 650MB 18MB/s 00:36
scpの活用例(-v)
scp -v ./config.yaml user@192.168.1.10:/home/user/
【出力例:】
Executing: program /usr/bin/ssh host 192.168.1.10, user: user, command: scp -t /home/user/
Sending file modes: C0644 256 config.yaml
Sink: C0644 256 config.yaml
転送状況を詳細に表示できるため、失敗時の原因調査に役立ちます。
圧縮を有効化できるため、回線が遅い環境でも転送が高速化します。
scpの活用例(-l)
scp -l 8000 ./movie.mp4 user@192.168.1.10:/home/user/
【出力例:】
movie.mp4 100% 100MB 800KB/s 02:08
帯域を制御できるため、業務時間中でも他の通信に影響を与えずにファイルを転送できます。
sftpの活用例(-P)
sftpは対話的に操作できるため、相手サーバーのディレクトリ構造を確認しながら作業できるのが大きなメリットです。ミスを防ぎたいときや、複数ファイルを扱うときに便利です。
sftp -P 2222 user@192.168.1.10
【出力例:】
Connected to 192.168.1.10.
sftp>
メリット: 通常の22番以外のポートでも接続可能です。
接続後の操作例:
sftp> put localfile.txt
sftp> get remotefile.txt
sftp> ls
sftp> exit
【出力例:】
Uploading localfile.txt to /home/user/localfile.txt
localfile.txt 100% 12KB 600KB/s 00:00
Downloading remotefile.txt to ./remotefile.txt
remotefile.txt 100% 25KB 700KB/s 00:00
file1.txt
file2.log
remotefile.txt
メリット: putでアップロード、getでダウンロード、lsで確認といった基本操作をまとめて行えるため、ファイル管理がわかりやすく、誤転送の防止にもつながります。
利用時の注意点
SSHは便利で強力なツールですが、設定や運用を誤るとセキュリティリスクが高まります。ここでは日常的に注意すべきポイントをまとめます。普段から意識しておくことで、トラブルを未然に防ぎ、サーバーを安全に利用できるようになります。
ログと認証失敗記録の確認
SSHを利用する環境では、不正アクセスを試みるログイン失敗が頻繁に発生します。ログを確認する習慣を持つことで、早期に異常を発見できます。
sudo journalctl -u sshd | grep "Failed password"
【出力例:】
Sep 07 10:45:12 server sshd[1234]: Failed password for invalid user admin from 203.0.113.10 port 54321 ssh2
Sep 07 10:45:15 server sshd[1234]: Failed password for root from 203.0.113.10 port 54321 ssh2
このように定期的にログを確認すれば、不審なアクセス元を把握でき、ファイアウォールでのブロックやセキュリティ強化につなげられます。
パーミッション設定の重要性
公開鍵認証を利用していても、鍵ファイルやディレクトリのパーミッションが適切でないとログインに失敗します。適切なパーミッションを設定することが安全な利用につながります。
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys chmod 600 ~/.ssh/id_rsa
【出力例:】
[user@localhost ~]$ ls -ld ~/.ssh
drwx------ 2 user user 4096 Sep 7 10:50 .ssh
[user@localhost ~]$ ls -l ~/.ssh/authorized_keys
-rw------- 1 user user 400 Sep 7 10:50 authorized_keys
正しい権限を設定しておくことで、第三者による不正利用を防げると同時に、想定外のログインエラーも回避できます。
運用上のセキュリティリスク
SSHをそのまま利用すると、インターネット経由で多くの攻撃対象になります。少しの工夫でセキュリティリスクを大幅に減らすことができます。
代表的な対策は以下の通りです。
| 対策 | 効果 |
|---|---|
| PermitRootLogin no | rootアカウントでの直接ログインを禁止し、不正侵入を防止できる |
| PasswordAuthentication no | 公開鍵認証に限定して総当たり攻撃を無効化できる |
| ポート変更 | 22番以外のポートで待ち受けることで自動攻撃の対象になりにくくなる |
| Fail2banの導入 | 一定回数失敗した接続元を自動的にブロックできる |
これらを組み合わせて実装すれば、日常運用でのリスクを下げ、安心してサーバーを活用できます。
まとめ
ここまでSSHの基本から応用、そしてセキュリティを強化するためのポイントまで解説しました。単に「リモートでログインするための仕組み」として利用するのではなく、公開鍵認証やconfigファイル、ポートフォワーディングなどを活用することで、日常の管理作業が効率化され、セキュリティも格段に高まります。
また、scpやsftpを使ったファイル転送は、暗号化された経路を通すことで安全にやり取りできるという大きな利点があります。オプションを理解して使い分ければ、作業時間の短縮やトラブルの予防にもつながります。
さらに、ログ監視やパーミッションの適正化といった基本的な注意点を押さえておくことで、不正アクセスや設定ミスを未然に防げます。こうした小さな工夫の積み重ねが、安定した運用につながるのです。
SSHはエンジニアにとって避けて通れない重要な技術です。仕組みを理解し、日常業務に取り入れることで「効率」と「安全」の両立が可能になります。
次のおすすめ記事
実践環境を整える
ここまで学んだ知識を実際に試すには、Linuxを動かす環境が必要です。手軽に始めるならVPSを利用するのがおすすめです。
→ VPS徹底比較!ConoHa・さくら・Xserverの選び方
VPSを利用してLinux環境を準備したら、実際の設定は下記の記事が参考になります。
→ VPSに開発環境を自動構築する方法|Apache+Tomcat+PostgreSQL




