ssh通信って何?エンジニアは押さえておきたいsshの基礎知識
18/08/15 12:05:45 19/04/27 19:07:15
情報処理試験を受けたことのある人ならsshはよく出てきたかと思います。特にsshの一種である公開鍵暗号方式に関する問題は定番です。問題自体はなんとなく解放を覚えて説いていたものの、改めてsshに関して聞かれると実はよくわからないという方も多いのではないでしょうか。
そこでこのページでは、sshに関する基本を解説していきます。
目次
sshは通信規格の一種
sshは通信規格の一種で、何らかの形で通信を暗号化した形式のことです。
よくプロトコルという説明がされますが、プロトコルって何?という方も多いかもしれません。プロトコルとは規格のことを横文字を使ってそれっぽく表現しているだけなので、混乱しないよう気を付けてください。
もっともわかりやすい例としては、webサイトのあるサーバーにアクセスする際の「https://」です。webサイトにアクセスするときのURLをよく見ている人は気づいているかと思いますが、「https://」とsが付くものもあれば、「http://」とsが付かないものもあります。
実はこのsはsshのsで、通信を暗号化されているかどうかの違いがあります。セキュリティ的な観点では、「https://」のサイトは「http://」よりも強固ということです。また、グーグルは「https://」のサイトを「http://」よりも上位表示すると明言しています。
もちろんサイトの中身によるのですが、同じような内容のサイトならsshの方を優先すると明言しており、そのくらいsshは重要ということです。今後より一層主流かつセキュリティの強固な通信規格に進化していくと考えられ、エンジニアは基礎的なことは知っておくべきでしょう。
sshについて知らないとセキュリティへの意識が低い印象になります。
sshの種類
sshは上記の通り通信を暗号化した規格ですが、そのなかでもいくつかの種類があります。大まかにわけると以下のようになります。
- パスワード認証によるもの。
- 公開鍵認証によるもの。
どちらも情報処理試験に出てくる内容なのですでに知っている人も多いでしょう。
パスワード認証方式とは?
パスワード認証は、パスワードでサーバーにアクセスする方法です。サーバー側であらかじめパスワードを設定しておいて、それと一致するパスワードをクライアント端末から入力するとアクセスできます。
次に公開鍵認証方式では、公開鍵と秘密鍵を照合することでセキュリティを強固にする方法です。公開鍵認証方式に関しては情報処理試験の鉄板になるほど優れたシステムなので、事項で詳しく説明します。
公開鍵認証方式とは?
公開鍵認証方式は、公開鍵と秘密鍵を照合する方法です。どちらも鍵という名前になっているのですが、公開鍵の方を鍵穴と考えた方がイメージしやすいかもしれません。実際はもちろん鍵でも鍵穴でもなくただのシステム照合なのですが、便宜上このような呼び名になっています。
基本的にはサーバー側に公開鍵を設定し、クライアント側に秘密鍵を配布します。webサイトなどの場合、サーバーに登録したクライアント端末に対して秘密鍵が配布されるケースが多いです。
公開鍵と秘密鍵の作成方法は今回は基礎知識なので割愛しますが、コマンドから作成する方法が比較的簡単です。コマンドを入力することで乱数を暗号作成し、ハッシュ値の作成ができます。
自動設定が便利
上記の通りsshの設定はコマンド入力から簡単にできるということでしたが、たとえばレンタルサーバーでwebサイトを運営する際などは自動でssh設定することが可能です。エンジニアのなかにも自分のサイト、会社のサイト、クライアントのサイトを普段触ることのある人も多いかと思います。
その際にはレンタルサーバーを使用するかと思いますが、CMSで作ったサイトでもゼロからコーディングして作ったサイトでもssh設定を自動で行えます。たとえばエックスサーバーであれば、たとえば以下のような流れで設定できます。
- ssh設定をオンにする。(クリックするだけ)
- パスワード入力画面から公開鍵認証用の鍵を発行する。
- パーミッション変更。(アクセス許可の設定のようなもの)
以上のように容易に設定できるようになっており、検索エンジン上のサイトは最近ではほとんどがssh設定されています。
つまり、sshは特別セキュリティの強化された通信規格というよりは、今の時代だと一般的なセキュリティレベルの通信規格です。
sshの課題
インターネット用のsshをsslと言いますが、いずれにしても2018年時点で世界中のwebサイトの25%はすでにssl化されています。昔はセキュリティ対策がきちんと施されたwebサイトはほとんど存在せず、当然通信の暗号化も行われていませんでした。
セキュリティへの意識は年々高まり、今後もその傾向は続くでしょう。しかし、通信の暗号化は課題も残ります。それは、偽装目的に通信を暗号化する人が出てくるということです。
上で説明した通り、通信の暗号化は誰でも簡単にできるようになっています。その結果、暗号化された通信を作成して配布し、あたかもセキュリティが万全であるかのように振る舞いながら個人情報等を盗み出す事件が多発しているのです。
リアルの世界にたとえると、今の時代どの家でも鍵を簡単に付け替えることができます。前の住人が使っていた鍵をそのまま使うのは危険なので、新しく住人が入居するたびに鍵を交換するケースも多いでしょう。
しかし、それはもちろん鍵屋が信用できる前提のもと鍵交換を行っています。もしも鍵交換の際に鍵屋が意図的に自分の分も作っていたら、簡単に住居に侵入されてしまいます。これと同様に、通信の暗号化を利用して自分に鍵を配布し、個人情報を盗み出す事例が多発しています。
また、発行した鍵から遠隔操作でハッキングされる事例もあります。これをリアルにたとえると、鍵屋が鍵に盗聴器を仕掛けているようなものです。インターネット上の場合はもっと危険なので盗聴器だけでなく監視カメラやマインドコントロールもセットで付いてくるくらいの危険性があるのですが、現実でそれらを鍵に付けることはできません。
ssh技術は悪用して証明書を発行される可能性があるということです。自分が悪用目的に配布された証明書を持たないことはもちろん、発行する際にも偽造されないよう注意する必要があります。
たとえばwebサイトにアクセスしただけで証明書が発行されるサイトがありますが、そこから認証作業を行うことでハッキングされるケースがあります。なので、むやみに認証するのは避けた方が良いでしょう。
次に、自分のwebサイトに勝手にssh通信を設定される可能性があります。そうすると、自分の情報はもちろんのこと、自分のサイトにアクセスしてきた人の情報も盗まれてしまいます。
人気のサイトを乗っ取り、そこにアクセスしてきた人の個人情報を盗み出す事件が発生していますが、実はここでもsshは大いに関わっています。ハッキングされたサイトからssh認証を行うのは簡単なので、偽の証明書を発行し、それをユーザーに配布します。
特に銀行や証券といった金融系企業のサイトや、アマゾンや楽天などの通販企業のサイトは狙われやすいです。こういったサイトにはクレジットカードや銀行口座の暗証番号を入力する可能性があります。
いつも通りssh認証を行ったはずが、実はハッカーが仕掛けた偽のssh認証という可能性があります。ユーザーも注意が必要ですが、金融系や通販系のシステム開発に携わるエンジニアは自分が携わったシステムでこういった事件が起こる可能性があります。
linux(CentOS)でsshのインストールと接続をしてみる
ここではlinux(CentOS)でsshをインストールして設定する方法を紹介します。CentOSで説明しますが、流れとしては別のlinuxOSでもだいたい同じです。
まずはsshでやり取りするためのサーバーとクライアントを用意します。それぞれインストールコマンドは以下です。
OpenSSHサーバーのインストール
# yum install openssh-server
OpenSSHクライアントのインストール
# yum install openssh-clients
これで土台は用意できました。次にsshの起動、停止、再起動を試してみます。
sshの起動
# systemctl start sshd
sshの停止
# systemctl stop sshd
sshの再起動
# systemctl restart sshd
停止と再起動は必須ではありませんが、なるべく網羅的に操作していった方が良いです。理由としては、たとえば後の工程で不具合が生じた際に、原因を特定しやすいからです。
うまくいかないと思ったら実はそもそも停止と再起動ができない状態だった、なんてことはなくした方が良いでしょう。
ファイアーウォールの確認&設定
これも必須ではありませんが、一応確認し、確率は低いですが設定コマンドが必要な場合もあります。
ファイアーウォールの確認
# firewall-cmd --list-all
上記のコマンドを実行するとファイアーウォールのステータスが表示されます。このとき「services」の項目を確認して、sshという文字が含まれていればOKです。
おそらく入っているかと思いますが、入っていない場合は以下のコマンドでsshの設定を行います。
sshの設定
# firewall-cmd --permanent --add-service=ssh
クライアントとサーバーの接続
ファイアーウォールの確認&設定ができたら、クライアントとサーバーを接続してみます。方法としては、クライアント側からサーバーのIPアドレスを指定します。
$ ssh -l <ユーザー名> xxx.xxx.xxx.xxx
この「xxx.xxx.xxx.xxx」の部分にサーバーのIPアドレスが入ります。コマンドを実行すると「Yes/No」で質問されるかもしれませんが、それは接続するかどうかの質問なので「Yes」を選びます。
これでsshを利用した接続ができました。コマンド操作自体は表面的なので内部の処理はよくわからないかもしれませんが、難しいプログラミングなどをしなくてもsshでの通信ができるということでした。
今回はlinuxで紹介しましたが、Windowsでもコマンドこそ違っていてもやることは同じです。Windowsで試してみたい方は調べてみてください。
人気記事