More than 1 year has passed since last update.

サーバにログインする時にはよくSSHが利用される。

しかし、SSHは単なるセキュアなシェルを実行するプロトコルで終わらない

Linuxコマンドの内部などでも多数利用されている。

今回はアドベントカレンダー1日目ということで、サーバログインのベースである

SSHの総合的なまとめを行っていきたいと思う

※間違えた知識を紹介している可能性があるので、間違えている箇所は指摘していただけると助かります。


SSHとは

セキュアシェルの略で、安全にネットワーク上のリモートコンピュータと通信を行うプロトコルである。

SSHよりも古いプロトコルでTelnetというプロトコルも存在する。

Telnetの歴史は古く、Unixの登場当初からTelnetプロトコルを利用した通信は存在していた。

しかし、現在Telnetを利用したリモート通信はほとんど行われていない。なぜなら、通信が暗号されていないからである。

SSHは認証部分も含めて全ての通信を暗号化してくれるので非常にセキュアである。


認証方法

現在、よく利用されているSSHの認証方法は主に3〜4パターンほどに分けられる(正確にどれだけの認証方法をSSHプロトコルがサポートしているかは調べていない)


パスワード認証

SSH-Serverをインストールしてデフォルトで起動すると使われる認証である。

一般的によく利用される認証方法だが、ブルートフォースなどに弱くセキュリティリスクがあるのでLocalNet内のみでの利用に留めた方が吉。


公開鍵認証

SSHでは最も使われている認証ではないかと思う。パブリックキーをサーバー側に置き、クライアント側にはプライベートキーを置く。

プライベートが漏れなければ安全な認証であると言える。


ワンタイムパスワード認証

文字の通り、1回のみ認証に有効なパスワードを発行してそれを用いて認証する方式である。

Google Authenticatorなどを利用したワンタイムパスワードの認証方法がネット上などにも記載されている。

外部のツールを使うのと、設定が複雑になる上に公開鍵に比べてセキュリティてきな点も問題が出てくる。

スマホで発行されたパスワードを確認する場合は、クライアントとスマホ両方のセキュリティリスクを考えなければいけなくなるからである。


CAによって証明されたpkiの証明書で認証

pkiの証明書を利用する方法はHTTPSプロトコル上で暗号化通信をする時に用いられるSSL証明書と原理は同じである。

公開鍵を認証過程で利用しているため、公開鍵認証とセキュリティレベルは同程度であると思われる。

多くのユーザを管理する場合などに用いられるらしい・・・・


SSHが実際に利用されているプロトコル

SSHが内部的に利用されている例として、SCPやSFTPなどのプロトコルがある。

これらのプロトコルはSSH上の安全な通信経路を利用して通信を行うことを前提にしている。


SFTPとSSHの設定を利用した応用

近年、クラウドストレージが登場してクラウド上にデータを保管する人も増えてきているのではないか?と思われる。しかし、現在のクラウドストレージサービスはそのほとんどがパスワード認証である。

そこで、SFTPをうまく利用すると擬似クラウドストレージの公開鍵認証版が作成できる。SSHの設定であらかじめログインできないユーザを作成する。

そのユーザを公開鍵認証でSFTP接続できるようにすれば、ファイルのみにアクセスできるユーザが公開鍵認証のみで接続できるセキュアなクラウドストレージを作成できるのである。


SSHを利用した時の鍵の管理

ここまで、SSHの内容を見てきたが実際にSSHでよく利用されている公開鍵認証の秘密鍵の管理方法を考えたい。秘密鍵は~/.sshのヂィレクトリ下に置かれることが多いが、これだけでは簡単に鍵が盗まれてしまう可能性がある。

一般的に機密性の高いデータを扱うサーバの秘密鍵はTPMなどの物理的なハードウェアに依存したところに保存するらしい!

ここら辺は知識が浅いので、また別の機会に・・・


最後にSSHの危険性

SSHでは、公開鍵を利用すれば安全という妄想にとらわれがちである。しかし、ログイン先のサーバ情報は~/.ssh/known_hosts内に記載されている情報のみである。

通常VPNなどの高信頼な拠点間通信を行う際は双方向認証を行うのが鉄則になっている。しかし、SSHの公開鍵認証を利用した認証では一方的なクライアント認証しかしていないので、実際にサーバが存在することを証明できていない。

ドメインとIPアドレスをセットで偽装された場合には簡単に秘密鍵が盗まれてしまう。

SSHでも双方向認証できる仕組みがあった気もするが覚えてないので、思い出した時に記載することにする。pki使うんだっけ?


まとめ


  • 現在リモート通信ではSSHがよく利用されている

  • SSHには様々な認証方式があり、利用パターンに応じて選択できる

  • SSHはその性質上他のプロトコルの通信の土台になることがある

  • 鍵の管理方法について

  • SSHが公開鍵認証のみでは危険な可能性について


参考