Linux リテラシ2006 - 第5回 SSH/SCP
リモートシェル
Section titled “リモートシェル”サーバの管理をするなど、扱うコンピュータの数が多くなってきた時いちいちコンピュータの目の前に行き作業をするのは手間がかかります。コンピュータを離れた場所から操作する手段としてリモートシェルというものがあります。代表的なリモートシェルとして rsh や telnet といったものがあり、これらを使用することにより離れた場所にあるコンピュータに命令を送り実行させることができます。

しかし rsh と telnet は通信内容が平文で送信されるため、通信経路の途中で通信内容を盗聴されると重要な情報が漏れてしまう危険性があります。

このセキュリティ上の問題を解決し安全に遠隔操作を行うことができるリモートシェルとして SSH というものがあります。
:平文:暗号化されていない情報のこと。
SSH は暗号化を施したリモートシェルで、次の3つを組み合わせて暗号通信を行います。
- 共通鍵暗号方式
- 公開鍵暗号方式
- RSA 認証方式
このうち共通鍵暗号方式と公開鍵暗号方式は鍵暗号と呼ばれる暗号化技術です。鍵暗号ではその言葉通り「鍵」と呼ばれるものを使用してデータの暗号化や復号を行います。
:鍵:暗号化や復号を行う際に用いる情報が書かれているもの。
共通鍵暗号方式
Section titled “共通鍵暗号方式”共通鍵暗号方式は一つの鍵で暗号化と復号を行います。暗号化と復号に同じ鍵を用いるため、暗号通信を行う場合は予め安全な経路を使用して鍵を渡す必要があります (ネットワークを通して渡すのはNG)。通信先に鍵を予め渡しておく必要があることから、この暗号方式は通信先が決まっている時、つまり特定の人と通信をするのに向いています。また、共通鍵暗号方式の特徴として暗号化等の処理が早いという点があります。

公開鍵暗号方式
Section titled “公開鍵暗号方式”公開鍵暗号方式は異なる鍵を用いて暗号化と復号を行います。この暗号方式で使われる鍵として、公開鍵と秘密鍵の2種類があります。
- 秘密鍵から生成される鍵。データを送って欲しい人に持ってもらう
- 対となる秘密鍵で暗号化されたデータのみ復号できる
- 公開鍵から対となる秘密鍵を割り出すのは非常に困難なため、この鍵は他人に知られても大丈夫
- データを受信したい人が持つ鍵
- 対となる公開鍵で暗号化されたデータのみ復号できる
- この鍵は他人に知られてはいけない
- 秘密鍵は生成時に設定するパスワードにより暗号化されている(秘密鍵を使用する際はこのパスワードを入力しないと使用できない)

公開鍵暗号方式では、データを受信したい人は公開鍵をネットワーク上に公開し、それを使用して暗号化したデータを送ってもらいます。暗号化されたデータは公開鍵を生成した本人が持つ秘密鍵を使用してのみ復号できるため、暗号化されたデータを他人に読まれる心配はありません。公開鍵暗号方式は公開鍵をネットワーク上に公開することができるため、共通鍵暗号方式とは違い、通信先が決まっていない場合でも柔軟に暗号通信を行うことができます。ただし、公開鍵暗号方式は共通鍵暗号方式よりも暗号化等の処理に時間がかかるという欠点があります。
- 公開鍵暗号方式のイメージ

秘密鍵で暗号化することもできますが、復号するために必要な公開鍵は誰でも入手できるため情報の守秘性を守るものにはなりません。
RSA認証方式
Section titled “RSA認証方式”- 公開鍵暗号方式の公開鍵と秘密鍵を、正当なユーザであることの証明に使用します
- 認証を行うには予め通信先に公開鍵が登録されている必要があります
- 以下の手順で認証を行います
+ユーザはサーバに対して接続を要求します
- 要求を受けたサーバは乱数データを生成します
- サーバは生成した乱数データを予め登録されている公開鍵で暗号化し、ユーザに送信します
- ユーザは暗号化されたデータを登録した公開鍵と対になる秘密鍵で復号します
- ユーザは復号して得たデータをサーバに送信します
- サーバが生成した乱数データとユーザから送られてきたデータが一致すれば認証成功です

公開鍵で暗号化したデータは、対となる秘密鍵で復号した場合のみ暗号化前と同じデータを得ることができます。また対となる秘密鍵を持っているのは鍵を生成したユーザ本人だけであるため、暗号化して送信したデータが正しい内容で返ってきた時正しいユーザであることの証明となります。
SSHサーバへの接続
Section titled “SSHサーバへの接続”- SSH で実際に通信を行う際には次のような手順になります
+サーバは接続を求めてきたユーザに対しRSA認証を行います
- RSA認証に成功したら、サーバは共通鍵を生成します
- 生成した共通鍵を公開鍵を使って暗号化して、ユーザに送信します
- ユーザは暗号化された共通鍵を秘密鍵を使って復号し、共通鍵を手に入れます
- 以後、共通鍵を使用して暗号通信を行います
ユーザが通信を終えたら共通鍵は破棄され、再び通信を行うときは再度サーバから入手します。(サーバもその都度新しく共通鍵を生成します)
SSH では上記のように二つの鍵暗号方式を組み合わせて使用し、両者の長所を生かした暗号通信を行います。
- SSH を利用したファイル転送プロトコル
- ID、パスワードはもちろん転送中のファイルも暗号化されるため安全性は高いです
:ファイル転送:
- ネットワークを通したファイルの送信、受信
- FTP (File Transfer Protocol) が有名ですが、通信が暗号化されないためIDやパスワードが漏れる危険性があります
SSH サーバへの接続
Section titled “SSH サーバへの接続”今回は皆さんのノート PC にインストールされている PuTTY というプログラムを使用して Windows から SSH サーバへアクセスします。今回は触れませんが、Linux から SSH サーバへアクセスすることもできます。
SSH サーバへの接続に必要なものを用意します。
SSH の説明の項から分かるように
- 秘密鍵
- 公開鍵
の二つが必要になります。
(SSH と SCP の使用方法については、こちらのページでも説明されているので参照してみてください。)
:秘密鍵、及び公開鍵の作成:
PuTTY のプログラム群に含まれる puttygen.exe というプログラムを使用して次の手順で秘密鍵を作成します。
++ puttygen.exe を実行します
++[生成]ボタンを押して指示に従えば秘密鍵が生成されます
- 同時に公開鍵も生成されます
++鍵のパスワードを設定します
++適当な名前で秘密鍵を保存します
++ ssh-rsa から始まる公開鍵をテキストファイル (ファイル名は public_key.txt とかあるいは 秘密鍵の名前.txt など) にコピーします。その際改行はいれずにそのままコピーしてください
二つの鍵は後で使用するので分かりやすい場所に保存しておいてください。
公開鍵の登録
Section titled “公開鍵の登録”情報科学部のサーバでは情報科学部メンバーサイトから情報科学部のサーバに公開鍵が登録できるのでそれを利用します。登録の際ユーザ名とパスワードを求められますが、ラボマシンにログインする時のユーザ名とパスワードを入力してください。
今回は上記の登録方法を使用しますが、通常公開鍵を登録する時はユーザのホームディレクトリに .ssh というディレクトリを作成し、その中に authorized_keys というファイルを作り公開鍵を登録します。
/home └ ユーザ名 (ホームディレクトリ) └ .ssh (ディレクトリ) └ authorized_keys <- 公開鍵PuTTYの設定
Section titled “PuTTYの設定”基本的な設定項目は以下のとおりです。
| 設定名 | 内容 | PuTTYでの項目 |
|---|---|---|
| セッション名 | セッションの名前。この名前で設定内容が保存されます。 | [セッション]の「保存されたセッション」 |
| ホスト名 | 接続するサーバのホスト名 | [セッション]の「ホスト名」 |
| 秘密鍵 | サーバに登録した公開鍵と対になる秘密鍵 | [接続] -> [SSH]-> [認証] の「認証のためのプライベートキーファイル」 |
| ユーザ名 | サーバにログインするときのユーザ名 | [接続] -> [データ] の自動ログインユーザ名 |
| 文字セット | サーバが使用している文字セット | [ウィンドウ] -> [変換] の「受信のデータは次の文字セットとみなされる」 |
最低限ホスト名と秘密鍵さえ設定すれば接続はできます。
他の設定に関しては
- セッション名は設定を保存したときにつけられる設定の名前です。設定を保存しておけば2度目以降は設定を読み込むだけで接続できます。
- ユーザ名はサーバにログインする時のユーザ名です。設定しておくとユーザ名の入力を省略できます。
- 文字セットはサーバで使用している文字セットです。正しく設定しないと日本語が文字化けします。
情報科学部のサーバに接続するときの設定は
| 設定名 | 内容 |
|---|---|
| セッション名 | 分かりやすければ何でもいいです。Lab 等。ホスト名をそのまま使ってもいいです |
| ホスト名 | ssh.cis.k.hosei.ac.jp |
| 秘密鍵 | 情報科学部メンバーサイトで登録した公開鍵と対になる秘密鍵 |
| ユーザ名 | ラボマシンにログインする時のユーザ名 |
| 文字セット | UTF-8 (CJK) |
PuTTYを使って SSH サーバへ接続
Section titled “PuTTYを使って SSH サーバへ接続”次の手順で SSH サーバへ接続を行います。
+「PuTTY の設定」で保存したセッションを開きます
- PuTTY のセキュリティ警告が出てくるので内容を確認して「はい」を押します +秘密鍵のパスワードを求められるので入力します
- PuTTYでユーザ名を設定してない場合は「login as:」とユーザ名も求められます
後は Linux の端末を使うように扱えます。
SCP を使う
Section titled “SCP を使う”Windows 上で SCP を利用するために WinSCP というプログラムを使います。こちらも皆さんのノート PC にはすでにインストールされています。
PuTTY の設定を取り込む
Section titled “PuTTY の設定を取り込む”次の手順で PuTTY の設定を WinSCP に取り込んで利用することができます。
+[セッション] -> [保存したセッション] を開きます
+[機能(Tools)]ボタンを押して、[取り込み(Import)]を押します。すると PuTTY で保存したセッションのリストが表示されます
+取り込みたいセッションにチェックを付けて、[取り込み(Import)]ボタンを押します
+後は使い方は PuTTY と同じです。保存されているセッションを開いて、パスワードを入力すれば接続できます
情報科学部アプリケーションサーバ
Section titled “情報科学部アプリケーションサーバ”今回接続する情報科学部のアプリケーションサーバからはラボ環境のホームディレクトリにアクセスすることができます。

図のようにラボ環境ではファイル本体をラボマシンとは別のファイルサーバに保存し、ラボマシンやアプリケーションサーバはネットワークを通してこのファイルを共有しています。