Linux リテラシ - 第6回 SSH
SSH(Secure Shell)
- 暗号化が施されているリモートシェル。
- 通信を暗号化して、通信内容が外部に漏れないようにしています。
リモートシェル
- ネットワーク上の任意のマシンのシェルに対してコマンドを送信し、遠隔地からマシンを操作するための手段。
- telnetやrshが有名です。
- しかしメッセージが平文のままネットワークを流れるのでID、パスワードが漏れる危険性があります。
- これはリモートシェルに限らずHTTPやFTPでも同様のことが言えます。
- これでは危険なのでSSHでは通信を暗号化しています。
SSHの暗号方式
この3つを組み合わせて暗号通信を行います。
- 鍵
暗号通信においてデータの暗号化、及び暗号データの復号に使用します。
共通鍵暗号方式
- 通信を行う2者が互いに同じ鍵を使って暗号通信を行います。
- 暗号化に使う鍵と復号に使う鍵が同じで、暗号、復号処理が速いです。
どちらか一方の鍵を他人に知られてしまうと暗号通信が成り立ちません。したがって鍵の受け渡しは安全な方法で行う必要があります。(そのままネットワークを通して渡すのはNG)
公開鍵暗号方式
- 秘密鍵と対になる公開鍵を使って暗号通信を行います。
- 公開鍵は他人に知られてもよいため、鍵の受け渡しが簡単です。
- 公開鍵
- 秘密鍵から生成される鍵。データを送って欲しい人に持ってもらいます。
- この鍵を使って暗号化されたデータは対になる秘密鍵だけが復号できます。
- 公開鍵から対になる秘密鍵を作ることはできないのでこの鍵は他人に知られても大丈夫です。
- 秘密鍵
- データを受信するユーザーが持つ鍵。この鍵で暗号化されたデータは対になる公開鍵で復号できます。
- この鍵は他人に知られてはいけません。
- さらに秘密鍵はあらかじめユーザが設定したパスワードによって暗号化された状態で保存されます。(パスワードを入力しないと秘密鍵が使えません)
公開鍵は暗号化に使う暗号鍵、秘密鍵は復号に使う復号鍵。
秘密鍵でもデータの暗号化ができますが、これは公開鍵を使って復号することができるためデータの守秘性を守ることにはなりません。(公開されている鍵で復号できるため)
RSA認証
- 公開鍵暗号方式で使用する秘密鍵と公開鍵を、正当なユーザであることの証明に使います。
- 認証を行う手順は以下の通りです。
- あらかじめ鍵は生成してあり、公開鍵はサーバに登録してあるものとします。
- ユーザはサーバに対して接続を要求します。
- 要求を受けたサーバは乱数データを生成します。
- サーバは生成した乱数データを登録されている公開鍵を使って暗号化し、送信します。
- ユーザは受信した暗号データを自分の秘密鍵を使って復号します。
- ユーザは復号して得たデータをサーバに送信します。
- ユーザから送られてきたデータがサーバの生成したデータと一致すれば認証成功となります。
SSHサーバへの接続
- RSA認証を行いユーザが成功した場合、共通鍵を公開鍵暗号方式を使ってユーザに送信し、それ以後は共通鍵暗号方式で通信を行います。
- 手順
- サーバは接続を求めてきたユーザに対しRSA認証を行います。
- RSA認証に成功したら、サーバは共通鍵を生成します。
- 生成した共通鍵を公開鍵を使って暗号化して、ユーザに送信します。
- ユーザは暗号化された共通鍵を秘密鍵を使って復号し、共通鍵を手に入れます。
- 以後、共通鍵を使用して暗号通信を行います。
ユーザが通信を終えたら共通鍵は破棄され、再び通信を行うときは
再度サーバから入手します。(サーバもその都度新しく共通鍵を生成します)
SCP(Secure CoPy)
- SSHを利用したファイル転送プロトコル
- ID、パスワードはもちろん転送中のファイルも暗号化されるため安全性は高いです。
- ファイル転送
- ネットワークを通したファイルの送信、受信。
- FTP(File Transfer Protocol)が有名ですが、通信が暗号化されないためIDやパスワードが漏れる危険性があります。
SSHサーバーへの接続
今回はWindowsからLinuxサーバへアクセスします。
- LinuxからLinuxサーバへアクセスすることもできます。(RATポータルサイト内でアクセス方法が紹介されています。)
- PuTTYというWindows用のプログラムが使いやすく日本語化パッチを当てたものが配布されているのでそれを使います。
準備
SSHの説明の項から分かるように
の二つが必要になります。
- 秘密鍵、及び公開鍵の作成
- PuTTYのプログラム群に含まれるputtygen.exeというプログラムを使って秘密鍵を作成します。
- puttygen.exeを実行します。
- [生成]ボタンを押して指示に従えば秘密鍵が生成されます。
- 鍵のパスワードを設定します。
- 適当な名前で秘密鍵を保存します。
- ssh-rsaから始まる公開鍵をテキストファイル(ファイル名はpublic_key.txtとかあるいは 秘密鍵の名前.txtなど)にコピーします。改行を混ぜずにそのままコピーしてください。
二つの鍵は後で使用するので分かりやすい場所に保存しておいてください
公開鍵の登録
- 情報科学部のサーバでは情報科学部メンバーサイトから情報科学部のサーバーに公開鍵が登録できるのでそれを利用します。
- ユーザ名とパスワードはラボマシンにログインする時のユーザ名とパスワードです。
サーバによって公開鍵の登録の仕方は異なります。一般的なのはユーザーのホームディレクトリに .ssh というディレクトリを作成し、その中でauthorized_keysという名前のテキストファイルに公開鍵を登録します。
/username(ホームディレクトリ)
└ .ssh (ディレクトリ)
└ authorized_keys <- 公開鍵
PuTTYの設定
設定名 | 内容 | PuTTYでの項目 |
セッション名 | セッションの名前。この名前で設定内容が保存されます。 | [セッション]の「保存されたセッション」 |
ホスト名 | 接続するサーバのホスト名 | [セッション]の「ホスト名」 |
秘密鍵 | サーバに登録した公開鍵と対になる秘密鍵 | [接続] -> [SSH]-> [認証] の「認証のためのプライベートキーファイル」 |
ユーザ名 | サーバにログインするときのユーザ名 | [接続] -> [データ] の自動ログインユーザ名 |
文字セット | サーバが使用している文字セット | [ウィンドウ] -> [変換] の「受信のデータは次の文字セットとみなされる」 |
- 最低限ホスト名と秘密鍵さえ設定すれば接続はできます。
他の設定に関しては
- セッション名は設定を保存したときにつけられる設定の名前です。設定を保存しておけば2度目以降は設定を読み込むだけで接続できます。
- ユーザ名はサーバにログインする時のユーザ名です。設定しておくとユーザ名の入力を省略できます。
- 文字セットはサーバで使用している文字セットです。正しく設定しないと日本語が文字化けします。
情報科学部のサーバに接続するときの設定は
設定名 | 内容 |
セッション名 | 分かりやすければ何でもいいです。Lab等。ホスト名をそのまま使ってもいいです |
ホスト名 | ssh.cis.k.hosei.ac.jp |
秘密鍵 | 情報科学部メンバーサイトで登録した公開鍵と対になる秘密鍵 |
ユーザ名 | ラボマシンにログインする時のユーザ名 |
文字セット | UTF-8(CJK) |
PuTTYを使ってSSHサーバへ接続
- 「PuTTYの設定」で保存したセッションを開きます
- PuTTYのセキュリティ警告が出てきますが無視して「はい」を押します。
- 秘密鍵のパスワードを求められるので入力します。
- PuTTYでユーザ名を設定してない場合は「login as:」とユーザ名も求められます。
後はLinuxのターミナルを使うように扱えます。
SCPを使う
- WinSCPというプログラムを使います。
- 1、2年生のノートPCには既にインストールされています。
- URL:http://winscp.net/eng/download.php
- ココからダウンロードして実行すればインストーラーが起動し、インストールできます。
- WinSCP 3.7.5 betaは多言語版でも日本語がサポートされていません。
- WinSCP 3.7.4 はサポートされているので日本語が使いたい人はこちらを利用するといいです。(Multilanguage installation package というのが多言語版です。)
- WinSCPを使えばPuTTYで保存した設定内容が流用できます。
PuTTYの設定を取り込む
- [セッション] -> [保存したセッション] を開きます
- [機能(Tools)]ボタンを押して、[取り込み(Import)]を押せばPuTTYで保存したセッションのリストが表示されます。
- 取り込みたいセッションにチェックを付けて、[取り込み(Import)]ボタンを押せば設定が取り込まれます。
- 使い方はPuTTYと同じです。保存されているセッションを開いて、パスワードを入力すれば接続できます。
情報科学部アプリケーションサーバ
今回接続する情報科学部のアプリケーションサーバからはラボ環境のホームディレクトリにアクセスすることができます。
図のようにラボ環境ではファイル本体をラボマシンとは別のファイルサーバに保存し、ラボマシンやアプリケーションサーバはネットワークを通してこのファイルを共有しています。