Webデザイナーになったばかりの皆さん、サーバに「入った」ことはありますか?
前回は「サーバとかクラウドサーバってどんなもの? 」と題して、サーバそのものの理解を深めました。今回はそのサーバに「入る」方法について学んでいきます。
制作した画像やCSS、HTMLファイルをサーバにアップして納品することは、Webデザイナーの皆さんにとっても馴染みがあると思います。スムーズにサーバへ入って、さっくり仕事を終わらせましょう。
プロローグ:FFFTPでファイルをアップしたいのにサーバに入れない!
ここは企業のWebサイトの構築を専門としているA社の一室。プライドゆえ人には言いづらい悩みごとを抱えたWebデザイナーと、その駆け込み寺となっているインフラエンジニアがいました。
「テストサイトをアップしたいのに、サーバに入れない!」
「なに?顔真っ赤にしてどうしたの!?」
「Webサイトの画像ができあがったから、いつもどおりFFFTPでアップしようと思って、FTPのアカウントとパスワード教えてくださいって言ったら、FTPは使えないって言われたんだよ…」
「あー、なるほどね。もしかしてFTPじゃなくてSSHでって言われた?」
「えす…なんだっけな? SFTP?って言われた、多分」
「じゃあSFTPのアカウントとパスワードは教えてもらえたの?」
「それが鍵をくれって言われてさ。鍵ってなに?意味が分かんない。サーバに入りたいんだから俺に鍵くれよ」
「あー、鍵認証なんだね。そのサーバ」
「いいからFTPのアカウントとパスワードくださいってもう一回言ったら、セキュリティ面でFTPは許可してないって返事が返ってきてさ。なんなの? 俺はファイルアップできないってこと?」
「どうどうどう、落ち着いて。ええと、相手の人が何を言ってるのか、ちゃんとわかるように説明するよ」
「小難しくしない?」
「しないしない。それに一回ちゃんと理解すれば、もうサーバに入れなくてイライラすることもなくなるよ」
そう、この記事を読み終わる頃には、あなたもサーバにサクサク入れるようになっているはずです。
サーバに「入った」ことありますか?
皆さんはサーバに「入った」ことはありますか?
ターミナルで「ログインする」 、ファイルをアップするためにサーバに「接続する」など、人によって言い方は違いますが、「入る」というのは、要は何か作業をするためにそのサーバに「ログインする」こと です。何か作業をするという言い方も曖昧ですが、たとえばサイトを更新するとか、画像を更新するとか、そういう作業だと思ってください。
Webデザイナーであれば、何かしらの形でサーバに入ったことがある方も少なくないのではないでしょうか。「 えー、サーバに入ったことなんかないよ!」と言う人でも、次のような図に見覚えありませんか。
WinSCPでサーバに入っている画面
この図はWinSCPというソフトの画面です。サイトの制作や運用を担当している人が、サーバにWebページや画像のファイルをアップロードするときによく使っています。右がサーバに「入って」見ている画面で、左は自分が今使っているパソコンのフォルダの中身です。
そして次の図はPuTTYというソフトの画面です。こちらは主に技術者がサーバで諸々の設定をしたり、ログを確認したりするときに使われます。Webデザイナーの皆さんには、いわゆる「黒い画面」と言った方がお馴染みかもしれません。
PuTTYでサーバに入っている画面
どちらもサーバに「入って」 、フォルダの中身を一覧で見ています。先に挙げたWinSCPの画面の右側と、このPuTTYの画面をよく見比べてみてください。並んでいるフォルダや画像、HTMLのファイルがすべて同じであることが分かると思います。
実はこれ、見え方は違いますが、同じサーバに「入って」同じフォルダを見ています 。実際のWinSCPやPuTTYの画面を見たことで、サーバに「入る」という言葉のイメージが少しつきましたでしょうか。
ではサーバにはどうやって「入る」のでしょう? WinSCPやPuTTYといったソフトをインストールして立ち上げたら、自動でサーバに入れるのでしょうか?
入る方法は色々あるのですが、今回はサーバに「リモートで、SSHで、鍵認証で入る」 方法について紹介していきます。
サーバには「ローカル」で入る? それとも「リモート」で入る?
WinSCPやPuTTYのことは一旦忘れてください。もっと大きい枠組みで「サーバに入る」ことを捉えてみましょう。サーバに入るには大きく分けて2つの方法があります。
1つ目は普段、みなさんがパソコンを使うときのように、サーバの目の前に座って、サーバ本体にキーボードやモニタをつないで直接使うというやり方です。サーバは一般的にデータセンターやオフィス内のサーバルームにあることが多いです。そのため、そこまで行って、キーボードとモニタをつないでサーバを使うのです。
このようにサーバと自分が物理的に同じ場所に居て、キーボードやモニタをつないで直接使える環境を「ローカル」と言います。
しかしこの1つ目の方法は現実的ではありません。サイト更新のたびにデータセンターまで出かけて行って、サーバにキーボードやモニタをつないでファイルをアップする、なんて無理ですよね。そこで2つ目の方法、「 リモート」です。
実はサーバには、物理的に離れた場所からネットワーク越しに入ることができるのです。サイト更新のたびにデータセンターまで行く必要はありません。この2つ目の方法のように、サーバと自分が別々の場所にいて、ネットワーク越しに使える環境を「リモート」と言います。
離れた場所からテレビを操作できる道具を「リモートコントローラ」 、略してリモコンと言いますよね。リモコンのリモートは、離れた場所からサーバに入れる「リモート」とまったく同じ意味です。
ローカルとリモートの違い
という訳で、サーバには基本的にリモートで入ります。ではリモートでどのように入るのでしょう?
サーバにリモートで入るには「SSH」を使おう
サーバにリモートで入るには、サーバのSSHというサービスを使います。
前回の「サーバとかクラウドサーバってどんなもの? 」で述べたとおり、サーバとはクライアントに対してサービスを提供するもの のことです。ビールサーバなら「客に対してビールを提供するもの」で、Webサーバなら「客に対してWebページを提供するもの」となります。
そして聞きなれないかも知れませんが、SSHが働いているサーバのことをSSHサーバと言います。ではビールサーバ、Webサーバときて、SSHサーバは何のサービスを提供してくれるのでしょう?
SSHは「サーバに入れて」と他の場所から言われたら、身元を確認した上で入れてくれます。つまりSSHサーバは、アクセスしてきた人に対して「ネットワークを介してサーバにログインできる」サービスを提供します。それにより、リモート(=遠くにいてネットワークでつながっている)のサーバと、自分が使っている目の前のパソコンとを安全につながることができるのです。
ちなみにSSHはSecure Shellの略です。このShell(シェル)は、ユーザの操作を受けとって、そこから与えられた「ファイルをアップする」や「ファイルを削除する」などの指示をサーバに伝えるソフトのことです。
SSHが自分のパソコンとサーバを繋いでくれることで、遠くにいるサーバにファイルをアップロードしたり、操作したりすることができます。しかもこのときネットワーク上を流れるデータは暗号化されるため、一連の操作はすべて安全に行うことができます。
SSHって素晴らしいですね!
「FTPが使えない」と言われたのはなぜ?
SSHと似た仕組みに「FTP (File Transfer Protocol) 」や「Telnet(Telecommunication network) 」があります。FFFTP(FTPでファイル転送するためのソフト)なら使ったことがある!という方も多いのではないでしょうか。
FFFTP Projectが配布しているフリーソフトウェアのFFFTP
しかしFTPやTelnetだと通信内容は暗号化されず、そのまま(平文)で送られるため、通信経路を盗聴されるとアカウントやパスワードが簡単に盗まれてしまう という問題点があります。要は自分のパソコンからサーバまで、データが全部透明なトンネルを通っていくようなものだと思ってください。丸見えです。
そこで最近はFTPではなく、SSHの仕組みを用いた「SFTP」 (SSH File Transfer Protocol)や「SCP 」( Secure Copy)というファイル転送の仕組みがよく使われています(最初に述べたWinSCPは、WindowsでSCPを使ってファイル転送をするソフトなので、WinSCPという名前なのです) 。
SFTPやSCPなら、たとえ通信経路を盗聴されても、そこを流れていくアカウントやパスワードは暗号化されているので安全です。データが中の見えないトンネルを通っていくようなものです。
SSHを猫にたとえてパスワード認証と鍵認証を理解しよう
ファイルをアップするときはサーバにリモートでSSHで入ったほうが良いことは理解できたと思います。ではリモートでSSHで、具体的にどう入るのでしょう?
サーバにはSSHの「パスワード認証」または「鍵認証」で入ります 。
パスワード認証はともかく、鍵認証の仕組みはとても複雑です。そこで、サーバに入るまでのやり取りを分かりやすくするため、ここでSSHを猫にたとえてみましょう。SSHは猫です。ふかふかした毛並みの猫だと思ってください。SSHである猫は安全第一と書かれたヘルメットをかぶり、サーバの「SSH」と書かれたドアの前で短い腕を組んで待ち構えています。
SSHでサーバに入るには、2つのやり方があります。1つ目はユーザ名とパスワードによる「パスワード認証 」です。ちなみに「認証」とは、「 サーバに入れてもいい人か?」「 その人が名乗っている本人なのか?」を判断することです。それではパスワード認証でサーバに入ってみましょう。
「ユーザ名はdesignerで、パスワードはM?\#:y&a{61です!」
「パスワードが違うニャ!お前誰だニャ!」
「ま、間違えました。ユーザ名はdesignerで、パスワードはke9Q@\*v83Aです!」
「よし、入れニャ!」
パスワード認証の流れ
やりました! SSHのパスワード認証でサーバの中に入ることができました。しかしこのパスワード認証には問題があります。
パスワード認証でサーバにログインするとき、ユーザ名とパスワードは、パソコンからサーバまでネットワーク上をだーだーと流れていきます。たとえSSHで暗号化されていても、その途中で誰かにパスワードを盗聴される可能性はゼロではありません。
盗聴されても、暗号化されているんだから問題ないのでは?と思うかもしれませんが、人が覚えられるパスワードはせいぜい6文字~10文字がいいところです。10文字程度の暗号を解読するのにそう時間はかかりませんし、正しいパスワードに行きつくまで、ひたすらありとあらゆる文字の組み合わせを試してみる総当たり攻撃を受けて、侵入されてしまう可能性もあります。
かといって長すぎるパスワードは人間には覚えられません。パスワードを30文字にしたはいいけど、覚えられなくてメモしたばかりにメモを他人に盗み見られるということもあり得ます。
そこで出てくるのが2つ目のやり方、秘密鍵と公開鍵の鍵ペアによる「鍵認証」 です。
パスワード認証よりも安全な鍵認証とは?
「鍵認証」とは、事前に自分のパソコンの中で秘密鍵と公開鍵の鍵ペアを作っておき、公開鍵だけをサーバに設置しておく というやり方です。
この鍵認証方式はちょっと複雑です。秘密鍵で作った暗号はペアの公開鍵でしか解けず、公開鍵で作った暗号はペアの秘密鍵でしか解けないという性質を利用して認証しています。なんだか難しいなと思った方は、とりあえず秘密鍵が鍵で、公開鍵が鍵穴 なんだと思ってください。それでは鍵認証でサーバに入ってみましょう。
「ユーザ名はdesignerです」
「うむ。今おいらが作った乱数を、サーバにあるお前の公開鍵で暗号化してお前に送るニャ!」
「暗号化された乱数を受け取りました」
「よしよし。じゃあおいらはこの乱数をハッシュ関数に突っ込んでハッシュ値を出すニャ!」
「俺はこの乱数を、手元にある私の秘密鍵で復号します...よし!そしてこの乱数をハッシュ関数に突っ込んでハッシュ値を出します。ハッシュ値出ました、送ります」
「designerのハッシュ値、受け取ったニャ。おいらの出したハッシュ値と、お前の出したハッシュ値を照らし合わせて……同じ! よし、間違いない、通れニャ!」
やりました! SSHの鍵認証でサーバの中に入ることができました。鍵認証は「私の公開鍵」で暗号化したものは、「 私の秘密鍵」でないと復号(=暗号を解くこと)ができない という性質を利用して、このように「サーバに入れてもいい人か?」「 その人が名乗っている本人なのか?」を確認しているのです。
ちなみに先ほどの会話にさらっと出てきましたが、ハッシュ値というのは「あるデータ」を「ハッシュ関数で計算」した結果です。この「ハッシュ関数で計算」というのは、「 データを細かく切り刻んで一定の長さに整える」ようなものなので、元のデータが一緒ならハッシュ値も同じに、元のデータが違えばハッシュ値も違うものになります(まるで指紋のように一意なことから、ハッシュ値はフィンガープリント(指紋)とも呼ばれています) 。
この鍵認証方式なら、ネットワークを流れるのは最初にサーバへ設置する「公開鍵」と、ログイン時に送られる暗号化された「乱数」及び「ハッシュ値」だけなので、たとえ盗聴されてもまったく問題ありません。秘密鍵が入ったパソコンを丸ごと盗まれない限り、他人が私に成りすましてサーバに入ることはできないのです。しかもパソコンを丸ごと盗まれても、パソコンの中の秘密鍵を使うにはさらに「パスフレーズ」が必要です。
このように鍵認証は何重にも安全な構造になっているため、サーバに入るときは「パスワード認証」ではなく、より安全な「鍵認証」がお勧めです。
突然、会話も解説もものすごく難しくなりましたね。何を言っているのかさっぱり分からない、という方のために、先ほどの会話を分かりやすく簡略化してみましょう。
「ユーザ名はdesignerです」
「お前のパソコンに入ってる秘密鍵と、サーバに置いてあるdesignerの公開鍵は間違いなくペアだニャ!よし、入れニャ!」
鍵認証の大まかな流れ
急に分かりやすくなりました。鍵認証とは要はこういうことなのです。これでサーバに「リモートで、SSHで、鍵認証で入る」方法が理解できたでしょうか。
サーバに入りたかったらユーザ名とパスワードの代わりに何を聞けばいい?
FTPのパスワード認証でサーバにログインするときは、サーバを用意した人に
ホスト名(サーバの名前またはIPアドレス)
ユーザ名
パスワード
の3つを聞けば、サーバに入ることができました。しかし、今回のWebデザイナーのように、サーバにSSHの鍵認証でログインしなければならないときには、まず自分のパソコンで秘密鍵と公開鍵の鍵ペアを作り、その公開鍵をサーバを用意した人へメールなどで送って、
ホスト名(サーバの名前またはIPアドレス)
ユーザ名
の2つを聞けば大丈夫です。
鍵ペアを作るというと難しそうに聞こえますが、WindowsならWinSCPをダウンロードすると、その中にPuTTYgenという鍵を作るためのソフトが同梱されていますので、そのソフトで「Generate(生成) 」ボタンを押せばすぐに作ることができます。Macなら、専用のソフトをダウンロードする必要すらなく、最初から入ってるターミナルというソフトでssh-keygenコマンドを使えば簡単に作れます。
PuTTYgenで鍵を作っている画面。上部のssh-rsaから始まるテキストが公開鍵
なお先ほども言いましたが、鍵認証は「公開鍵」だけをサーバに設置して、「 秘密鍵」は決してパソコンから外に出さないことによって、安全性を確保している仕組みなので、秘密鍵が一度でもPCの外に出てしまうと、その鍵ペアの安全性は0になってしまいます。サーバを用意した人に公開鍵を送ろうとして、間違って秘密鍵を送ってしまわないように気をつけてください。
鍵認証なんて面倒なことをどうしてするの?
これまで、サーバに「リモートで、SSHで、鍵認証で入る」方法について紹介してきましたが、最後に「なんでそんなことをするのか?」について、もう少し広い視点で考えてみましょう。
ここまで読めば分かったとおり、鍵認証は最初の設定が面倒です。FTPのパスワード認証なら、ユーザ名とパスワードが教えてもらえば今まで使っていたFFFTPですぐにサーバへ入れますが、SSHの鍵認証だと、まず自分のパソコンに必要なソフトをインストールして、自分で秘密鍵と公開鍵のペアを作り、サーバの用意した人に公開鍵を送ってサーバに設置してもらわなければいけません。
なんでこんな面倒臭いことをするのでしょうか。今までどおり、パスワード認証でいいではないか、もっと簡単に入れるようにしてよ!と思う人も多いでしょう。しかし、なぜこんなに面倒なことをするかと言うと、簡単に入られたら=侵入されたら困るから なのです。
巷でサーバに不正に侵入しようとする攻撃があることは知っていても、なんとなく他人事だと思っている方がほとんどではないでしょうか。しかし他人事ではありません。2006年8月に発表された警視庁の分析レポートでは、検証のために用意したサーバに対して、たった1ヶ月の間に24の国と地域から、41,456回の不正侵入攻撃があったそうです。なんと1日につき1,382回も、悪意を持った誰かから「このIDとこのパスワードの組み合わせならログインできるかな?」と試されていたということです。
2006年でこれですから、今はこの数字の何十倍もの件数になっていると思われます。このようにサーバというものは日々攻撃にさらされていて、何も対策しなければあっという間に侵入される ものなのです。
サーバを安心して使い続けられるように、サーバの中にある大切な情報が外部に漏れたり、データが壊されたりして、それによってWebサイトが見られなくなってしまうことのないように、たとえ面倒でもSSHや鍵認証といった、安全のために必要な情報セキュリティ対策をきちんとすることが大切なのです。
エピローグ:鍵認証でサーバに入るために先ずは鍵ペアを作ろう
「あー、鍵をくれって、俺のパソコンで作った公開鍵を送ってくれっていうことだったのか」
「そうそう。じゃあまずはそのパソコンで、秘密鍵と公開鍵の鍵ペアを作りましょうか」
「分かった。不安だから一緒にやってくれる?」
「もちろん! で、鍵ペアを作ったら公開鍵だけ相手に送れば大丈夫。秘密鍵は秘密なんだから絶対に送っちゃダメよ?」
「うん、じゃあWinSCPをダウンロードしてみるか」
こうしてWebデザイナーの悩みが、また一つ解決されたのでした。
次回のお悩みは?
「ネットショップのhttpsではじまるページで、鍵のマークが壊れて表示されるんだけど!?なにこれ?」
次回のサーバ知識相談室は、ネットショップやお問い合わせページ、アンケートフォームなど、httpsから始まるページで使われているSSL証明書についてご紹介します。名前は聞いたことがあるけど、そもそも何のために必要なのかよく分からないSSL証明書。役割や仕組みを理解することで、鍵マークが壊れていたときの対処法を学びましょう。