SSHとは何か?Telnetとの違いと安全なリモート接続の仕組み

SSHとは何か

SSHによる安全なリモートログインの仕組みを理解しよう

Linuxサーバを運用するうえで欠かせない技術の一つがSSH(Secure Shell)です。

現在ではオンプレミス環境だけでなく、AWSやAzureなどのクラウド環境でもSSHが標準的に利用されています。Linuxサーバへログインして設定変更を行ったり、ファイルを転送したり、障害調査を実施したりする際に利用されるため、インフラエンジニアやサーバ管理者にとって必須の知識といえるでしょう。

しかし、Linuxを学び始めたばかりの方の中には「SSHとは何なのか」「Telnetとの違いは何か」「なぜSSHを使う必要があるのか」と疑問に思う方も多いでしょう。

本記事ではSSHの基本的な仕組みや特徴、Telnetとの違い、実務での利用例について詳しく解説します。

SSHとは何か

SSH(Secure Shell)とは、ネットワーク経由で別のコンピュータへ安全に接続するためのプロトコルです。

Secure(安全な)という名前の通り、通信内容を暗号化しながらリモートログインやコマンド実行を行うことができます。

例えば、自宅のPCからデータセンターに設置されたLinuxサーバへ接続し、サーバ管理を行う場合にSSHが利用されます。

一般的な接続例は以下のようになります。

$ ssh user@192.168.1.100

接続後はサーバの前に座って操作しているのと同じようにコマンドを実行できます。

Linux管理者にとってSSHは毎日利用するといっても過言ではない重要な技術です。

SSHが必要になった理由

SSHが登場する以前は、Telnetというプロトコルが広く利用されていました。

Telnetもリモートログインを実現するための仕組みでしたが、大きな問題を抱えていました。

それは通信内容が暗号化されないことです。

Telnetでは以下の情報が平文のままネットワーク上を流れます。

  • ユーザー名
  • パスワード
  • 実行したコマンド
  • サーバからの応答内容

例えばネットワーク上でパケットキャプチャを行うと、入力したパスワードがそのまま見えてしまう場合があります。

現在のセキュリティ基準では非常に危険な状態であり、企業システムでは利用が推奨されていません。

この問題を解決するために開発されたのがSSHです。

SSHとTelnetの違い

項目SSHTelnet
通信の暗号化ありなし
認証方式パスワード認証・公開鍵認証パスワード認証
標準ポート22/TCP23/TCP
盗聴対策可能不可
現在の利用状況広く利用ほぼ利用されない

現在のLinuxサーバやネットワーク機器ではSSHが標準となっています。

CiscoルータやL3スイッチなども、管理用アクセスにはSSHを利用するのが一般的です。

SSHの基本的な仕組み

SSH接続では単純にログインしているわけではありません。

接続時には複数のセキュリティ処理が実行されています。

サーバ認証

まず接続先サーバが本物であることを確認します。

初回接続時に以下のようなメッセージが表示された経験がある方もいるでしょう。

The authenticity of host can't be established.
Are you sure you want to continue connecting?

これは接続先サーバの公開鍵を確認するためのメッセージです。

承認すると接続先情報はknown_hostsファイルへ保存されます。

鍵交換

次に暗号化通信で利用する共通鍵を生成します。

現在では以下のような方式が利用されています。

  • Curve25519
  • ECDH
  • Diffie-Hellman

鍵交換により第三者へ秘密情報を渡さずに暗号化通信を開始できます。

通信の暗号化

通信内容は強力な暗号アルゴリズムによって保護されます。

代表的なアルゴリズムは以下の通りです。

  • AES
  • ChaCha20
  • AES-GCM

そのため通信内容を盗聴されても簡単に解読されることはありません。

ユーザー認証

最後にユーザー認証が行われます。

認証方式には以下があります。

  • パスワード認証
  • 公開鍵認証
  • 多要素認証(MFA)

実務では公開鍵認証が広く利用されています。

SSHでできること

リモートログイン

$ ssh user@server.example.com

最も一般的な利用方法です。

リモートコマンド実行

$ ssh user@server "df -h"

ログインせずにコマンドのみ実行できます。

運用自動化や監視スクリプトで利用されます。

ファイル転送

$ scp backup.tar.gz user@server:/backup

SSHを利用して安全にファイルを転送できます。

SFTP

$ sftp user@server

FTPの代替として利用される安全なファイル転送方式です。

ポートフォワーディング

SSHトンネルを利用して安全に通信を中継できます。

社内ネットワークのデータベースへ安全にアクセスする際などに利用されます。

Linuxで利用されるOpenSSH

現在のLinux環境ではOpenSSHが事実上の標準となっています。

AlmaLinuxやRocky Linux、UbuntuなどほとんどのLinuxディストリビューションに搭載されています。

サーバ側サービスはsshdという名前で動作します。

状態確認は以下のコマンドで行えます。
$ systemctl status sshd

サービス起動は以下の通りです。
# systemctl start sshd

OS起動時に自動起動させる場合は以下を実行します。
# systemctl enable sshd

SSH接続の流れ

SSH接続時には次のような処理が行われています。

  1. TCP 22番ポートへ接続
  2. サーバ公開鍵の確認
  3. 鍵交換処理
  4. 暗号化通信開始
  5. ユーザー認証
  6. シェル利用開始

管理者は普段意識しませんが、この一連の処理が数秒以内に完了しています。

実務でのSSH利用例

企業環境ではSSHがさまざまな場面で利用されています。

  • Linuxサーバ管理
  • Webサーバ保守
  • AWS EC2管理
  • Azure Linux VM管理
  • Dockerホスト管理
  • Kubernetesノード管理
  • ネットワーク機器管理
  • バックアップ運用

近年ではGUIよりもSSHによる運用の方が一般的なケースも少なくありません。

SSH利用時のセキュリティ対策

SSHは安全なプロトコルですが、設定を誤ると攻撃対象になります。

実務では以下のような対策が推奨されています。

  • rootログイン禁止
  • 公開鍵認証の利用
  • 不要アカウントの削除
  • 接続元IPアドレス制限
  • Fail2ban導入
  • OSとOpenSSHの定期更新

特にインターネット公開サーバでは、パスワード認証のみの運用は避けるべきです。

まとめ

SSHはLinuxサーバ管理において最も重要なリモート接続技術の一つです。

Telnetとは異なり、通信内容を暗号化することで盗聴や情報漏洩のリスクを大幅に低減できます。

現在のサーバ運用ではSSHが標準となっており、Linux管理者やインフラエンジニアであれば必ず理解しておくべき技術です。

今後は公開鍵認証、known_hosts、authorized_keys、SSHポートフォワーディングなどの関連技術も学習することで、より実践的なSSH運用ができるようになるでしょう。