SSH 【Secure Shell】
概要
SSH(Secure Shell)とは、主にLinuxなどのUNIX系OSで利用される、ネットワークを通じて別のコンピュータを安全に遠隔操作するための通信手順(プロトコル)およびソフトウェア(sshコマンド、sshデーモンなど)。通信経路が暗号化されるため、インターネットなどを経由しても安全にアクセスすることができる。オペレーティングシステム(OS)を利用者が対話的に操作することができる「シェル」(shell)を遠隔から呼び出してネットワークを通じて操作する仕様を定めている。接続後は一般的なUNIX系OSのシェルと同じようにコマンドの発行を行い、実行結果を文字で受け取ることができる。
公開鍵暗号と秘密鍵暗号を組み合わせて通信経路を暗号化し、パスワードなどの認証情報や入力されるコマンド、出力された処理結果などをすべて暗号化して送受信する。Telnetなど暗号化の仕組みのないプログラムやプロトコルに代わって安全な遠隔操作手段として普及している。
SSH接続で形成された安全な伝送経路を用いてローカル側とリモート側でファイルを複製(送受信)することもできる。標準ではcpコマンドに相当するscpコマンドが提供されるほか、FTPを模して作られた機能が豊富なSFTP(Secure File Transport Protocol/sftpコマンド)も利用できる。
SSHサーバとSSHクライアント
端末側で利用者が操作するソフトウェアを「SSHクライアント」、サーバ側で接続を受け付けるソフトウェアを「SSHサーバ」という。SSHサーバは標準ではTCPの22番ポートでクライアントの接続を待ち受ける。
SSHクライアント、SSHサーバともに様々な種類があるが、両方の機能を実装したオープンソースソフトウェアの「OpenSSH」の人気が高く、特にサーバの実装はこれを用いることが多い。ターミナルソフトなどにもSSHクライアント機能が内蔵されていることが多い。
接続手順
接続に先立ち、クライアントはサーバにパスワードを登録するか、公開鍵暗号の鍵ペアを生成して公開鍵をサーバに預ける。サーバ側にも導入時に固有の鍵ペアが生成されており、接続を希望するクライアントに公開鍵を渡しておく。
接続時にはまずクライアントが持つサーバの公開鍵を用いて、接続先のサーバがなりすましの偽物でないかを検証する(ホスト認証/サーバ認証)。本物と確認されたらDiffie-Hellman鍵交換などを用いて通信の暗号化に用いる共通鍵暗号の暗号鍵を共有し、伝送経路の暗号化を開始する。
パスワード認証を選択した場合には、暗号化された伝送経路を用いてパスワードを送信して利用者本人であることを確かめる。公開鍵認証を選択した場合には、クライアントが自らの秘密鍵で電子署名を生成してサーバに送付し、サーバは利用者の公開鍵で検証して本人かどうか確かめる。
公開鍵認証方式はパスワード認証のようにサーバに保管したパスワードの管理が杜撰で漏洩してしまったり、他のシステムと同じものを使い回してそちらから漏れるといった危険が無いため、利用可能であれば公開鍵認証を使うことが推奨される。
歴史
1980年代からUNIX系OSにはシェルの機能をネットワークを通じて遠隔から利用するrshやrexecなどのいわゆるr系コマンド群が存在したが、暗号化の仕組みが無く、インターネットなどオープンな環境で利用するのには適さない問題があった。
1995年、フィンランドのヘルシンキ工科大学(当時)に在籍するタトュ・ウルネン(Tatu Ylönen)氏がSSHの初期のバージョン(SSH-1)を開発した。これはフリーソフトウェアや、氏が創業したSSH Communications Security社の商用ソフトウェア製品などとして広まった。
2006年、SSH-1に発見された保安上の弱点(脆弱性)への対応やセキュリティ機能の強化が行われたSSH-2が開発され、RFC 4253など複数の仕様書によって標準化された。SSH-1とSSH-2は互換性がなく、現在ではSSH-2の方が普及しているが、古いソフトウェアとの互換性のためどちらで通信するか選択できる場合もある。
関連用語
関連リンク (外部サイト)
他の辞典による解説 (外部サイト)
この記事を参照している文書など (外部サイト)
- 埼玉女子短期大学研究紀要 第35号「ラズベリーパイ3によるDHCPサーバーの構築」(PDFファイル)にて引用 (2017年3月)