SSHとは?| セキュアシェル(SSH)プロトコル

セキュアシェル(SSH)プロトコルは、コンピュータ間のリモート暗号化接続を確立します。トンネリングも可能です。

学習目的

この記事を読み終えると、以下のことができるようになります。

  • セキュアシェル(SSH)プロトコルの定義
  • SSHの仕組みと安全性について説明する
  • SSHトンネリングを理解する
  • SSHのセキュリティリスクを説明する

関連コンテンツ


さらに詳しく知りたいとお考えですか?

是非、Cloudflareが毎月お届けする「theNET」を購読して、インターネットで最も人気のある洞察をまとめた情報を入手してください!

当社がお客様の個人データをどのように収集し処理するかについては、Cloudflareのプライバシーポリシーをご確認ください。

記事のリンクをコピーする

セキュアシェル(SSH)プロトコルとは?

セキュアシェル(SSH)プロトコルは、セキュリティで保護されていないネットワークを通してコンピュータに安全にコマンドを送信するための方法です。SSHは暗号理論を使用して、デバイス間の接続と認証を行い暗号化します。また、SSHはトンネリング(ポートフォワーディング)を可能にします。これは、データパケットが、他の方法では通過できないネットワークを通過できるようにすることです。SSHは、サーバーの遠隔操作やインフラ管理、ファイル転送などによく使用されます。

店舗のオーナーが出張中に、留守中も店が円滑に運営できるように従業員に遠方から指示を出すことがあります。同様に、SSHを使用することで管理者は遠方からサーバーやデバイスを管理することが可能になります。Telnetのような古いリモート管理プロトコルは、管理者のコマンドを誰もが閲覧できる形で転送します。(従業員が店主との通話をスピーカーフォンにした場合を考えて下さい。店内にいるすべてのお客様にプライベートな指示が聞こえてしまうでしょう)。SSHはTelnetとは異なりセキュアなものであり、これがSecure Shellという名前の由来となっています。

レポート
DDoS脅威の現状:2023年第3四半期

ホワイトペーパー
ネットワーク最新化の戦略策定

SSHでできることは?

リモート暗号化接続:SSHは、ユーザーのデバイスと遠く離れたマシン(多くの場合サーバー)との間の接続を確立します。暗号化を使用して、接続を通過するデータをスクランブル化します。傍受した側は、暗号を解読しない限り意味のない静的なランダムなデータしか見ることができません。(SSHは暗号化メソッドを採用しているため、部外者が復号化することは困難を極めます)。

トンネリング機能:トンネリングとは、ネットワーキングにおいて、通常では使用できないプロトコルや経路を使用して、ネットワーク上でパケットを移動させる方法のことです。トンネリングは、データパケット*をヘッダーと呼ばれる追加情報でラップし、宛先を変更することで機能します。SSHトンネルはポートフォワーディングと呼ばれる技術を使用して、あるマシンから別のマシンにパケットを送信します。ポートフォワーディングについては、以下で詳しく説明します。

*ネットワークを行き来するデータはすべて「パケット」と呼ばれる小さな塊に分割されます。

サインアップ
あらゆるCloudflareプランで実現するセキュリティとスピード

SSHの仕組みは?

TCP/IP

SSHは、インターネットの多くが依存するTCP/IPプロトコルスイートの上で動作します。TCPはTransmission Control Protocol、IP はInternet Protocolの略です。TCP/IPは、フォーマットを整え、ルーティングし、パケットを配信するために、この2つのプロトコルを組み合わせたものです。IPは、特にパケットの宛先となるIP アドレス(住所をイメージしてください)を示し、TCPは、パケットの宛先となる各IPアドレスに対するポート(ビルの階数やアパート番号をイメージしてください)を示します。

TCPはトランスポート層のプロトコルであり、データパケットの転送と配信に関係しています。TCP/IP上では通常、アプリケーションが使用できる形式で送信データを配置するために追加のプロトコルが使用されます。SSHはそのようなプロトコルのひとつです。(他の例としては、HTTP、FTP、SMTPなどがあります)。

公開鍵暗号

SSHは、公開鍵暗号と呼ばれるプロセスを経由して暗号化と認証を組み込んでいるため、「安全」です。公開鍵暗号は、2つの異なる鍵を使用してデータを暗号化または署名する方法です。鍵のひとつである公開鍵は、誰でも使うことができます。もう1つの鍵である秘密鍵は、その所有者により秘密に保たれます。この2つの鍵は互いに対応しているため、鍵の所有者の身元を確認するには、公開鍵に付随する秘密鍵を所有する必要があります。

これらの「非対称」鍵(値が異なるため、このように呼ばれます)は、接続の両側がチャネル上でさらに暗号化するために、同一の共有対称鍵を交換することも可能です。この交換が完了すると、両者は対称鍵を使用して交換するデータを暗号化します。

SSH接続では、双方が公開鍵/秘密鍵のペアを持ち、それぞれがこれらの鍵を使用して相手を認証します。これは、ほとんどの実装でクライアントサーバー接続においてWebサーバーの身元だけを確認するHTTPSと、SSHの相違点です。(その他の違いとしては、HTTPSでは通常クライアントはサーバーのコマンドラインにアクセスできないこと、ファイアウォールがSSHをブロックすることはあるがHTTPSをブロックすることはほとんどないことなどが挙げられます)。

認証

公開鍵暗号はSSHで接続されたデバイスを認証しますが、適切に保護されたコンピュータはSSHを使う人からの認証を必要とします。多くの場合、これはユーザ名とパスワードを入力する形式をとります。

認証が完了すると、ユーザーは自分のローカルマシンで実行しているかのように、リモートマシン上でコマンドを実行することができます。

SSHトンネリング(「ポートフォワーディング」)

ポートフォワーディングは、二者間でメッセージを転送するようなものです。ボブがアリスにメッセージを送ると、アリスはそれをデイブに渡します。同様に、ポートフォワーディングは、あるマシンのIPアドレスとポートに向けられたパケットを、別のマシンのIPアドレスとポートに送信します。

例えば、ある管理者が、プライベートネットワーク内の自身が管理するサーバーにリモートから変更を加えたいとします。ただし、該当のサーバーはセキュリティ上の理由から、プライベートネットワーク内の他のコンピューターからのパケットしか受け取らないものとします。管理者は直接アクセスする代わりに、ネットワーク内の第二のサーバー(インターネットからのトラフィックを受信できるオープンなサーバー)に接続し、SSHポートフォワーディングを使用して該当のサーバーに接続することができます。該当のサーバーからは、管理者のパケットはプライベートネットワーク内部から来ているように見えます。

SSHを使用する

LinuxとMac OSにはSSHが組み込まれています。Windowsマシンは、SSHクライアントアプリをインストールする必要があります。MacとLinuxコンピュータでは、ユーザーはターミナルアプリを開き、直接SSHコマンドを入力することができます。

SSHは何に使うのか?

技術的には、SSHはネットワークを介して任意のデータを転送することができ、SSHトンネリングは無数の目的のために設定することができます。その中で、最も一般的なSSHの使用例は以下の通りです:

  • サーバー、インフラ、従業員用コンピューターのリモート管理
  • 安全なファイル転送(SSHはFTPのような暗号化されていないプロトコルよりも安全です)
  • ローカルマシンのポートをインターネットに公開することなく、クラウド上のサービスにアクセスする
  • プライベートネットワーク内のサービスへのリモート接続
  • ファイアウォールの制限を回避する

SSHが使用するポートは?

SSHのデフォルトポートは22番ポートです。ファイアウォールは、ファイアウォールの背後にあるサーバーの特定のポートへのアクセスはブロックする一方で、ポート22はオープンのままにしておくことがあります。そのため、SSHはファイアウォールの先にあるサーバーにアクセスするのに便利です。ポート22に向けられたパケットはブロックされず、他のポートに転送することが可能です。

SSHに関連するセキュリティリスクは?

どのようなプロトコルも悪意のある者によって悪用される可能性がありますが、SSHの暗号化された性質とトンネリング機能は、攻撃者にとって特に魅力的です。SSHは、個人データを抜き出したり、安全なネットワークにバックドア経路を開いたり、さらにはサーバーのルートアクセス権を獲得するために、記録された多くの攻撃で使用されてきました。

特定の種の攻撃では、個人のコンピューターやサーバーにアクセスするためのSSH鍵を盗むことが可能です。実際、大規模な組織では多数のサーバーが何千、何百万もの鍵を使う可能性があり、それらの鍵を追跡・更新するのはほとんど不可能なため、SSH鍵の管理は大きなセキュリティ問題となっています。一度鍵を手に入れた攻撃者は、数か月から数年にわたりアクセスし続けることができてしまいます。

SSHと他のトンネリング用プロトコルとの違いは?

SSHと他のトンネリングプロトコルとの主な違いの一つは、それらが動作するOSI層です。GRE、IP-in-IP、IPsecはすべてネットワーク層のプロトコルです。そのため、ポート(トランスポート層の概念)を意識する必要が無く、IPアドレス間で動作します。(SSHの正確なOSI層は厳密には定義されていませんが、多くの情報源はそれを第7層/アプリケーション層のプロトコルとして記述しています)。

もう1つの違いは、SSHがTCPを使用することです。前述したように、TCPはトランスポート層のプロトコルであり、インターネット上で使用される主要なプロトコルのひとつです。トランスポート層で広く使われているもう一つのプロトコルはUDP(User Datagram Protocol)です。UDP は「ベストエフォート型」のトランスポートプロトコルであり、パケットの配信を保証せずにパケットを送信するため、高速になりますが、パケット損失が発生することがあります。対して、TCPはUDPよりも低速ではありますが、すべてのパケットを順番に配送することが保証されているため、信頼性の高いものになっています。

IPsec は、パケットをファイアウォールに通すために、TCPの代わりにUDPを使用します。そのため、 IPsecトンネルは通常SSHトンネルよりも高速ですが、転送中にパケットが失われる可能性があります。GREとIP-in-IP は、TCPまたはUDPのいずれかで使用できます。

最後に、SSHは一度に1つのアプリを暗号化するだけで、デバイスを行き来するすべてのトラフィックを暗号化するわけではありません。これは、どのアプリのものであるかを問わずネットワークトラフィックをすべて暗号化するIPsecと、SSHとの相違点です。このため、SSHはVPN接続の確立には使用されません。

Cloudflare Zero TrustはどのようにSSHの安全性を向上するか?

SSHは広く使われていますが、サーバーのポートをインターネットに公開することは常に危険が伴います。Cloudflare Zero Trustを使用すると、企業は着信用ポートを開くリスクを冒すことなく、インターネット経由でSSHサーバーを利用できるようになります。サーバーはCloudflareネットワークに安全に接続できるようになります。管理者やその他のユーザーは、 Cloudflare Warpクライアントをデバイスにインストールすることで、 Cloudflare経由でサーバーにアクセスすることができます。詳細についてはこちらをご覧ください。