Webデザイナーなら知っておくべき サーバ知識相談室

第2回ファイル転送はFTPじゃなくてSFTP? SSHで安全にサーバへ入ろう

Webデザイナーになったばかりの皆さん、サーバに「入った」ことはありますか?

前回はサーバとかクラウドサーバってどんなもの?と題して、サーバそのものの理解を深めました。今回はそのサーバに「入る」方法について学んでいきます。

制作した画像やCSS、HTMLファイルをサーバにアップして納品することは、Webデザイナーの皆さんにとっても馴染みがあると思います。スムーズにサーバへ入って、さっくり仕事を終わらせましょう。

プロローグ:FFFTPでファイルをアップしたいのにサーバに入れない!

ここは企業のWebサイトの構築を専門としているA社の一室。プライドゆえ人には言いづらい悩みごとを抱えたWebデザイナーと、その駆け込み寺となっているインフラエンジニアがいました。

Webデザイナー「テストサイトをアップしたいのに、サーバに入れない!」

エンジニア「なに?顔真っ赤にしてどうしたの!?」

Webデザイナー「Webサイトの画像ができあがったから、いつもどおりFFFTPでアップしようと思って、FTPのアカウントとパスワード教えてくださいって言ったら、FTPは使えないって言われたんだよ…」

エンジニア「あー、なるほどね。もしかしてFTPじゃなくてSSHでって言われた?」

Webデザイナー「えす…なんだっけな? SFTP?って言われた、多分」

エンジニア「じゃあSFTPのアカウントとパスワードは教えてもらえたの?」

Webデザイナー「それが鍵をくれって言われてさ。鍵ってなに?意味が分かんない。サーバに入りたいんだから俺に鍵くれよ」

エンジニア「あー、鍵認証なんだね。そのサーバ」

Webデザイナー「いいからFTPのアカウントとパスワードくださいってもう一回言ったら、セキュリティ面でFTPは許可してないって返事が返ってきてさ。なんなの? 俺はファイルアップできないってこと?」

エンジニア「どうどうどう、落ち着いて。ええと、相手の人が何を言ってるのか、ちゃんとわかるように説明するよ」

Webデザイナー「小難しくしない?」

エンジニア「しないしない。それに一回ちゃんと理解すれば、もうサーバに入れなくてイライラすることもなくなるよ」

そう、この記事を読み終わる頃には、あなたもサーバにサクサク入れるようになっているはずです。

サーバに「入った」ことありますか?

皆さんはサーバに「入った」ことはありますか?

ターミナルで「ログインする⁠⁠、ファイルをアップするためにサーバに「接続する」など、人によって言い方は違いますが、「入る」というのは、要は何か作業をするためにそのサーバに「ログインする」ことです。何か作業をするという言い方も曖昧ですが、たとえばサイトを更新するとか、画像を更新するとか、そういう作業だと思ってください。

Webデザイナーであれば、何かしらの形でサーバに入ったことがある方も少なくないのではないでしょうか。⁠えー、サーバに入ったことなんかないよ!」と言う人でも、次のような図に見覚えありませんか。

WinSCPでサーバに入っている画面
WinSCPでサーバに入っている画面

この図はWinSCPというソフトの画面です。サイトの制作や運用を担当している人が、サーバにWebページや画像のファイルをアップロードするときによく使っています。右がサーバに「入って」見ている画面で、左は自分が今使っているパソコンのフォルダの中身です。

そして次の図はPuTTYというソフトの画面です。こちらは主に技術者がサーバで諸々の設定をしたり、ログを確認したりするときに使われます。Webデザイナーの皆さんには、いわゆる「黒い画面」と言った方がお馴染みかもしれません。

PuTTYでサーバに入っている画面
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
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つ目はユーザ名とパスワードによるパスワード認証です。ちなみに「認証」とは、⁠サーバに入れてもいい人か?」⁠その人が名乗っている本人なのか?」を判断することです。それではパスワード認証でサーバに入ってみましょう。

Webデザイナー「ユーザ名はdesignerで、パスワードはM?\#:y&a{61です!」

SSH「パスワードが違うニャ!お前誰だニャ!」

Webデザイナー「ま、間違えました。ユーザ名はdesignerで、パスワードはke9Q@\*v83Aです!」

SSH「よし、入れニャ!」

パスワード認証の流れ
パスワード認証の流れ

やりました! SSHのパスワード認証でサーバの中に入ることができました。しかしこのパスワード認証には問題があります。

パスワード認証でサーバにログインするとき、ユーザ名とパスワードは、パソコンからサーバまでネットワーク上をだーだーと流れていきます。たとえSSHで暗号化されていても、その途中で誰かにパスワードを盗聴される可能性はゼロではありません。

盗聴されても、暗号化されているんだから問題ないのでは?と思うかもしれませんが、人が覚えられるパスワードはせいぜい6文字~10文字がいいところです。10文字程度の暗号を解読するのにそう時間はかかりませんし、正しいパスワードに行きつくまで、ひたすらありとあらゆる文字の組み合わせを試してみる総当たり攻撃を受けて、侵入されてしまう可能性もあります。

かといって長すぎるパスワードは人間には覚えられません。パスワードを30文字にしたはいいけど、覚えられなくてメモしたばかりにメモを他人に盗み見られるということもあり得ます。

そこで出てくるのが2つ目のやり方、秘密鍵と公開鍵の鍵ペアによる「鍵認証」です。

パスワード認証よりも安全な鍵認証とは?

「鍵認証」とは、事前に自分のパソコンの中で秘密鍵と公開鍵の鍵ペアを作っておき、公開鍵だけをサーバに設置しておくというやり方です。

この鍵認証方式はちょっと複雑です。秘密鍵で作った暗号はペアの公開鍵でしか解けず、公開鍵で作った暗号はペアの秘密鍵でしか解けないという性質を利用して認証しています。なんだか難しいなと思った方は、とりあえず秘密鍵が鍵で、公開鍵が鍵穴なんだと思ってください。それでは鍵認証でサーバに入ってみましょう。

Webデザイナー「ユーザ名はdesignerです」

SSH「うむ。今おいらが作った乱数を、サーバにあるお前の公開鍵で暗号化してお前に送るニャ!」

Webデザイナー「暗号化された乱数を受け取りました」

SSH「よしよし。じゃあおいらはこの乱数をハッシュ関数に突っ込んでハッシュ値を出すニャ!」

Webデザイナー「俺はこの乱数を、手元にある私の秘密鍵で復号します...よし!そしてこの乱数をハッシュ関数に突っ込んでハッシュ値を出します。ハッシュ値出ました、送ります」

SSH「designerのハッシュ値、受け取ったニャ。おいらの出したハッシュ値と、お前の出したハッシュ値を照らし合わせて……同じ! よし、間違いない、通れニャ!」

やりました! SSHの鍵認証でサーバの中に入ることができました。鍵認証は「私の公開鍵」で暗号化したものは、⁠私の秘密鍵」でないと復号(=暗号を解くこと)ができないという性質を利用して、このように「サーバに入れてもいい人か?」⁠その人が名乗っている本人なのか?」を確認しているのです。

ちなみに先ほどの会話にさらっと出てきましたが、ハッシュ値というのは「あるデータ」「ハッシュ関数で計算」した結果です。この「ハッシュ関数で計算」というのは、⁠データを細かく切り刻んで一定の長さに整える」ようなものなので、元のデータが一緒ならハッシュ値も同じに、元のデータが違えばハッシュ値も違うものになります(まるで指紋のように一意なことから、ハッシュ値はフィンガープリント(指紋)とも呼ばれています⁠⁠。

この鍵認証方式なら、ネットワークを流れるのは最初にサーバへ設置する「公開鍵」と、ログイン時に送られる暗号化された「乱数」及び「ハッシュ値」だけなので、たとえ盗聴されてもまったく問題ありません。秘密鍵が入ったパソコンを丸ごと盗まれない限り、他人が私に成りすましてサーバに入ることはできないのです。しかもパソコンを丸ごと盗まれても、パソコンの中の秘密鍵を使うにはさらに「パスフレーズ」が必要です。

このように鍵認証は何重にも安全な構造になっているため、サーバに入るときは「パスワード認証」ではなく、より安全な「鍵認証」がお勧めです。

突然、会話も解説もものすごく難しくなりましたね。何を言っているのかさっぱり分からない、という方のために、先ほどの会話を分かりやすく簡略化してみましょう。

Webデザイナー「ユーザ名はdesignerです」

SSH「お前のパソコンに入ってる秘密鍵と、サーバに置いてあるdesignerの公開鍵は間違いなくペアだニャ!よし、入れニャ!」

鍵認証の大まかな流れ
鍵認証の大まかな流れ

急に分かりやすくなりました。鍵認証とは要はこういうことなのです。これでサーバに「リモートで、SSHで、鍵認証で入る」方法が理解できたでしょうか。

サーバに入りたかったらユーザ名とパスワードの代わりに何を聞けばいい?

FTPのパスワード認証でサーバにログインするときは、サーバを用意した人に

  • ホスト名(サーバの名前またはIPアドレス)
  • ユーザ名
  • パスワード

の3つを聞けば、サーバに入ることができました。しかし、今回のWebデザイナーのように、サーバにSSHの鍵認証でログインしなければならないときには、まず自分のパソコンで秘密鍵と公開鍵の鍵ペアを作り、その公開鍵をサーバを用意した人へメールなどで送って、

  • ホスト名(サーバの名前またはIPアドレス)
  • ユーザ名

の2つを聞けば大丈夫です。

鍵ペアを作るというと難しそうに聞こえますが、WindowsならWinSCPをダウンロードすると、その中にPuTTYgenという鍵を作るためのソフトが同梱されていますので、そのソフトで「Generate(生成⁠⁠」ボタンを押せばすぐに作ることができます。Macなら、専用のソフトをダウンロードする必要すらなく、最初から入ってるターミナルというソフトでssh-keygenコマンドを使えば簡単に作れます。

PuTTYgenで鍵を作っている画面。上部のssh-rsaから始まるテキストが公開鍵
PuTTYgenで鍵を作っている画面。上部のssh-rsaから始まるテキストが公開鍵

なお先ほども言いましたが、鍵認証は「公開鍵」だけをサーバに設置して、⁠秘密鍵」は決してパソコンから外に出さないことによって、安全性を確保している仕組みなので、秘密鍵が一度でもPCの外に出てしまうと、その鍵ペアの安全性は0になってしまいます。サーバを用意した人に公開鍵を送ろうとして、間違って秘密鍵を送ってしまわないように気をつけてください。

鍵認証なんて面倒なことをどうしてするの?

これまで、サーバに「リモートで、SSHで、鍵認証で入る」方法について紹介してきましたが、最後に「なんでそんなことをするのか?」について、もう少し広い視点で考えてみましょう。

ここまで読めば分かったとおり、鍵認証は最初の設定が面倒です。FTPのパスワード認証なら、ユーザ名とパスワードが教えてもらえば今まで使っていたFFFTPですぐにサーバへ入れますが、SSHの鍵認証だと、まず自分のパソコンに必要なソフトをインストールして、自分で秘密鍵と公開鍵のペアを作り、サーバの用意した人に公開鍵を送ってサーバに設置してもらわなければいけません。

なんでこんな面倒臭いことをするのでしょうか。今までどおり、パスワード認証でいいではないか、もっと簡単に入れるようにしてよ!と思う人も多いでしょう。しかし、なぜこんなに面倒なことをするかと言うと、簡単に入られたら=侵入されたら困るからなのです。

巷でサーバに不正に侵入しようとする攻撃があることは知っていても、なんとなく他人事だと思っている方がほとんどではないでしょうか。しかし他人事ではありません。2006年8月に発表された警視庁の分析レポートでは、検証のために用意したサーバに対して、たった1ヶ月の間に24の国と地域から、41,456回の不正侵入攻撃があったそうです。なんと1日につき1,382回も、悪意を持った誰かから「このIDとこのパスワードの組み合わせならログインできるかな?」と試されていたということです。

2006年でこれですから、今はこの数字の何十倍もの件数になっていると思われます。このようにサーバというものは日々攻撃にさらされていて、何も対策しなければあっという間に侵入されるものなのです。

サーバを安心して使い続けられるように、サーバの中にある大切な情報が外部に漏れたり、データが壊されたりして、それによってWebサイトが見られなくなってしまうことのないように、たとえ面倒でもSSHや鍵認証といった、安全のために必要な情報セキュリティ対策をきちんとすることが大切なのです。

エピローグ:鍵認証でサーバに入るために先ずは鍵ペアを作ろう

Webデザイナー「あー、鍵をくれって、俺のパソコンで作った公開鍵を送ってくれっていうことだったのか」

エンジニア「そうそう。じゃあまずはそのパソコンで、秘密鍵と公開鍵の鍵ペアを作りましょうか」

Webデザイナー「分かった。不安だから一緒にやってくれる?」

エンジニア「もちろん! で、鍵ペアを作ったら公開鍵だけ相手に送れば大丈夫。秘密鍵は秘密なんだから絶対に送っちゃダメよ?」

Webデザイナー「うん、じゃあWinSCPをダウンロードしてみるか」

こうしてWebデザイナーの悩みが、また一つ解決されたのでした。

次回のお悩みは?

Webデザイナー「ネットショップのhttpsではじまるページで、鍵のマークが壊れて表示されるんだけど!?なにこれ?」

次回のサーバ知識相談室は、ネットショップやお問い合わせページ、アンケートフォームなど、httpsから始まるページで使われているSSL証明書についてご紹介します。名前は聞いたことがあるけど、そもそも何のために必要なのかよく分からないSSL証明書。役割や仕組みを理解することで、鍵マークが壊れていたときの対処法を学びましょう。

おすすめ記事

記事・ニュース一覧