Linux リテラシ2006 - 第5回 SSH/SCP

Ullr

リモートシェル

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

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

このセキュリティ上の問題を解決し安全に遠隔操作を行うことができるリモートシェルとして SSH というものがあります。

平文
暗号化されていない情報のこと。

SSH

SSH は暗号化を施したリモートシェルで、次の3つを組み合わせて暗号通信を行います。

このうち共通鍵暗号方式と公開鍵暗号方式は鍵暗号と呼ばれる暗号化技術です。鍵暗号ではその言葉通り「鍵」と呼ばれるものを使用してデータの暗号化や復号を行います。

暗号化や復号を行う際に用いる情報が書かれているもの。

共通鍵暗号方式

共通鍵暗号方式は一つの鍵で暗号化と復号を行います。暗号化と復号に同じ鍵を用いるため、暗号通信を行う場合は予め安全な経路を使用して鍵を渡す必要があります (ネットワークを通して渡すのはNG)。通信先に鍵を予め渡しておく必要があることから、この暗号方式は通信先が決まっている時、つまり特定の人と通信をするのに向いています。また、共通鍵暗号方式の特徴として暗号化等の処理が早いという点があります。

公開鍵暗号方式

公開鍵暗号方式は異なる鍵を用いて暗号化と復号を行います。この暗号方式で使われる鍵として、公開鍵と秘密鍵の2種類があります。

公開鍵

秘密鍵

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

秘密鍵で暗号化することもできますが、復号するために必要な公開鍵は誰でも入手できるため情報の守秘性を守るものにはなりません。

RSA認証方式

  1. ユーザはサーバに対して接続を要求します
  2. 要求を受けたサーバは乱数データを生成します
  3. サーバは生成した乱数データを予め登録されている公開鍵で暗号化し、ユーザに送信します
  4. ユーザは暗号化されたデータを登録した公開鍵と対になる秘密鍵で復号します
  5. ユーザは復号して得たデータをサーバに送信します
  6. サーバが生成した乱数データとユーザから送られてきたデータが一致すれば認証成功です

公開鍵で暗号化したデータは、対となる秘密鍵で復号した場合のみ暗号化前と同じデータを得ることができます。また対となる秘密鍵を持っているのは鍵を生成したユーザ本人だけであるため、暗号化して送信したデータが正しい内容で返ってきた時正しいユーザであることの証明となります。

SSHサーバへの接続

  1. サーバは接続を求めてきたユーザに対しRSA認証を行います
  2. RSA認証に成功したら、サーバは共通鍵を生成します
  3. 生成した共通鍵を公開鍵を使って暗号化して、ユーザに送信します
  4. ユーザは暗号化された共通鍵を秘密鍵を使って復号し、共通鍵を手に入れます
  5. 以後、共通鍵を使用して暗号通信を行います
ユーザが通信を終えたら共通鍵は破棄され、再び通信を行うときは
再度サーバから入手します。(サーバもその都度新しく共通鍵を生成します)

SSH では上記のように二つの鍵暗号方式を組み合わせて使用し、両者の長所を生かした暗号通信を行います。

SCP

ファイル転送

SSH サーバへの接続

今回は皆さんのノート PC にインストールされている PuTTY というプログラムを使用して Windows から SSH サーバへアクセスします。今回は触れませんが、Linux から SSH サーバへアクセスすることもできます。

準備

SSH サーバへの接続に必要なものを用意します。
SSH の説明の項から分かるように

の二つが必要になります。
(SSH と SCP の使用方法については、こちらのページでも説明されているので参照してみてください。)

秘密鍵、及び公開鍵の作成

PuTTY のプログラム群に含まれる puttygen.exe というプログラムを使用して次の手順で秘密鍵を作成します。

    1. puttygen.exe を実行します
    2. [生成]ボタンを押して指示に従えば秘密鍵が生成されます
      • 同時に公開鍵も生成されます
    3. 鍵のパスワードを設定します
    4. 適当な名前で秘密鍵を保存します
    5. ssh-rsa から始まる公開鍵をテキストファイル (ファイル名は public_key.txt とかあるいは 秘密鍵の名前.txt など) にコピーします。その際改行はいれずにそのままコピーしてください

二つの鍵は後で使用するので分かりやすい場所に保存しておいてください。

公開鍵の登録

情報科学部のサーバでは情報科学部メンバーサイトから情報科学部のサーバに公開鍵が登録できるのでそれを利用します。登録の際ユーザ名とパスワードを求められますが、ラボマシンにログインする時のユーザ名とパスワードを入力してください。

今回は上記の登録方法を使用しますが、通常公開鍵を登録する時はユーザのホームディレクトリに .ssh というディレクトリを作成し、その中に authorized_keys というファイルを作り公開鍵を登録します。

/home
  └ ユーザ名 (ホームディレクトリ)
       └ .ssh (ディレクトリ)
        └ authorized_keys <- 公開鍵

PuTTYの設定

基本的な設定項目は以下のとおりです。

設定名内容PuTTYでの項目
セッション名セッションの名前。この名前で設定内容が保存されます。[セッション]の「保存されたセッション」
ホスト名接続するサーバのホスト名[セッション]の「ホスト名」
秘密鍵サーバに登録した公開鍵と対になる秘密鍵[接続] -> [SSH]-> [認証] の「認証のためのプライベートキーファイル」
ユーザ名サーバにログインするときのユーザ名[接続] -> [データ] の自動ログインユーザ名
文字セットサーバが使用している文字セット[ウィンドウ] -> [変換] の「受信のデータは次の文字セットとみなされる」

最低限ホスト名と秘密鍵さえ設定すれば接続はできます。
他の設定に関しては

情報科学部のサーバに接続するときの設定は

設定名内容
セッション名分かりやすければ何でもいいです。Lab 等。ホスト名をそのまま使ってもいいです
ホスト名ssh.cis.k.hosei.ac.jp
秘密鍵情報科学部メンバーサイトで登録した公開鍵と対になる秘密鍵
ユーザ名ラボマシンにログインする時のユーザ名
文字セットUTF-8 (CJK)

PuTTYを使って SSH サーバへ接続

次の手順で SSH サーバへ接続を行います。

  1. 「PuTTY の設定」で保存したセッションを開きます
    • PuTTY のセキュリティ警告が出てくるので内容を確認して「はい」を押します
  2. 秘密鍵のパスワードを求められるので入力します
    • PuTTYでユーザ名を設定してない場合は「login as:」とユーザ名も求められます

後は Linux の端末を使うように扱えます。

SCP を使う

Windows 上で SCP を利用するために WinSCP というプログラムを使います。こちらも皆さんのノート PC にはすでにインストールされています。

PuTTY の設定を取り込む

次の手順で PuTTY の設定を WinSCP に取り込んで利用することができます。

  1. [セッション] -> [保存したセッション] を開きます
  2. [機能(Tools)]ボタンを押して、[取り込み(Import)]を押します。すると PuTTY で保存したセッションのリストが表示されます
  3. 取り込みたいセッションにチェックを付けて、[取り込み(Import)]ボタンを押します
  4. 後は使い方は PuTTY と同じです。保存されているセッションを開いて、パスワードを入力すれば接続できます

情報科学部アプリケーションサーバ

今回接続する情報科学部のアプリケーションサーバからはラボ環境のホームディレクトリにアクセスすることができます。

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