4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SSHってなんなの?

Posted at

俺は雰囲気でSSH接続を利用している! という感じだったので理解するために情報をとりまとめてみました。

そもそもSSHってなに?

SSHはSecure Shellの略称。

ネットワーク上で安全なリモートログインやネットワークサービスを提供するためのプロトコル。

SSHの歴史

SSH2の事を知りたければ下記、RFCを参照すればよい。

SSHのメジャーバージョンSSH1 と SSH2

SSHは歴史的な経緯からSSH1とSSH2のメジャーバージョンに分かれる。

SSH1とSSH2それぞれ互換性はないプロトコルとなっている。

SSH1は脆弱性が存在して、今現在廃止な状態。SSH2のみを利用するのがよい。

実装

SSHはプロトコルなので商用・フリー含めて色々な実装が存在する。

SSHではサーバ/クライアントとそれぞれ機能があるが、両方実装していたりクライアント機能のみ実装していたり対応はソフトによってまちまち。

etcetc...SSHプロトコルを実装したサーバ/クライアントソフトウェアはフリー・商用含めて色々とあるようです。

世間的にはOpenSSHとか様々なOSに標準でインストールされていたりするのでメジャーな感じらしい。

SSHのプロトコルについて調べてみる

SSHがセキュアな通信を行うための仕組みだということが解ったので、どういう仕組でセキュアな通信を実現しているかRFCを読んだりぐぐって得た情報をまとめておく。

なお2006年に発行されたRFCはSSH2プロトコルについて記述されている。

Protocol Architecture

4251 - The Secure Shell (SSH) Protocol Architecture

SSH2プロトコルは3つの下記の主要なサブプロトコルから構成されている。

  • Transport Layer Protocol
  • User Authentication Protocol
  • Connection Protocol

Transport Layer Protocol

4253 - The Secure Shell (SSH) Transport Layer Protocol

  • サーバとクライアントでやりとりするパケットのフォーマットについて
  • データ圧縮について
  • パケットの暗号化に用いる暗号化アルゴリズムについて
  • 暗号化に利用するワンタイムセッションキーをクライアントとサーバで安全に交換する方法としてDiffie-Hellman鍵交換方式を指定

Transport Layer Protocolではパケットのフォーマットだったり、圧縮・暗号また暗号に用いる鍵の安全な交換方法について規定されている。

※パケットの暗号化に使うアルゴリズムは3des-cbcを必須実装として、他のアルゴリズムは任意実装だったり推奨だったりのような事が書いてたりする。

User Authentication Protocol

Transport Layer Protocolでセキュアな通信を確立した後に、User Authentication Protocolを用いて接続してくるユーザの正当性を判断する。

User Authentication Protocolではサーバとクライアントでどのように認証のやり取りを行うか規定しているようです。

4252 - The Secure Shell (SSH) Authentication Protocol

RFCを読むと必須実装として規定してるのは公開鍵認証方式だけで、あとの認証方式はアプリ側に委ねられているようですね。

SSHを実装しているソフトウェアを確認してみると

  • ホストベース認証
  • パスワード認証
  • 公開鍵認証
  • Kerberos認証
  • ワンタイムパスワード認証
  • etcetc

等々、実装によって色々なユーザ認証の方式が行われいるようです。

Connection Protocol

Transport Layer ProtocolとUser Authentication Protocolが確立された上で、Connection Protocolでサービスを提供する。

4254 - The Secure Shell (SSH) Connection Protocol

SSHのConnection Protocolでは多重化されたチャネルを利用してセッション開始、擬似端末、x11フォワーディング、tcpポートフォワーディング等々サービスをユーザに提供する。

このチャネルのやりとりについて規定しているようです。

各プロトコルをまとめると

各プロトコルでそれぞれ下記のような事を行っているっぽい。

  • Transport Layer Protocolで安全な通信の確立
  • User Authentication Protocolでユーザの正当性を確立
  • Connection Protocolでチャネルを利用してサービスを提供

クライアントとサーバがSSH接続を行う際に、まずはTransport Layer Protocolで安全な通信を確立し、その後にUser Authentication Protocolで接続しようとしているユーザの正当性を確認。
その上でチャネルを利用して、サーバとクライアントでサービスのやりとりを行う。

フィンガープリント(finger print)って?

4255 - Using DNS to Securely Publish Secure Shell (SSH) Key Fingerprints

SSHではクライアントがまだ接続したことのないサーバに接続する際には、サーバ側は検証のためホスト鍵のフィンガープリントを提示すると規定されています。

  • ホスト鍵はSSHサーバに格納されている秘密鍵/公開鍵の事。User Authentication Protocolで利用する鍵とはまた別
  • フィンガープリントは公開鍵からハッシュ関数を用いて生成された文字列。公開鍵より短い長さとなり視覚的に人間が比較しやすい

予め信頼できる方法でサーバ鍵のフィンガープリントを確認しておき、初回接続時にサーバから提示されるフィンガープリントと一致することが確認できれば接続先のサーバについて同一性が確認できる。

中間者攻撃を防ぐような仕組み。

総評

SSHを雰囲気で利用している! という状態からは一歩抜け出せた気がするが、まだなんかゆるふわな気がする。

あとSSHの事を調べてたら、公開鍵認証を雰囲気で利用しているって事に気づきました。

4
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?