Help us understand the problem. What is going on with this article?

SSHの基本

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が公開鍵認証のみでは危険な可能性について

参考

Syo_pr
PHP / Kotlin / Python / Swift / HTML / CSS / JavaScript / MariaDB / 大学では、過去にはOpenMPやSIMDによる並列化 / 大学院では、歌詞動画の自動生成に関する機械学習 / ソフトウェアテストを書くのがとても好きです / 単体テスト、結合テストの魅力を広めて行きたいと思います / 依存性注入していきましょう!!!
recode
Recode は個人開発者が集う Slack コミュニティです。エンジニア・デザイナー等の職種を問わず、多様性のあるコミュニティを目指しています。
http://hukumoto.pe-gawa.com/club/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away